Skip to content

Commit 6c5ebc0

Browse files
Merge pull request #285 from moosetechnology/import-close-stmt
refactoring export of IOStatements + import of Close stmt + test
2 parents ab0fe0d + f32bafe commit 6c5ebc0

File tree

3 files changed

+60
-29
lines changed

3 files changed

+60
-29
lines changed

src/FAST-Fortran-Visitors-Tests/FortranToFASTTests.class.st

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,6 +803,40 @@ FortranToFASTTests >> testCallSubroutine [
803803

804804
]
805805

806+
{ #category : 'tests-statement' }
807+
FortranToFASTTests >> testCloseStatement [
808+
809+
| stmt result |
810+
fortranCode := ' PROGRAM main
811+
CLOSE(8, FILE=''projectA/data.test'', ERR=99)
812+
end
813+
'.
814+
jsonCode := '{"meta":{"miVersion":"fortran77","miFilename":"tmpFASTSource.f"},"program_units":[{"anno":[],"blocks":[{"anno":[],"label":null,"span":"(2:7)-(2:48)","statement":{"anno":[],"span":"(2:7)-(2:48)","specification":{"anno":[],"list":[{"anno":[],"expr":{"anno":[],"span":"(2:12)-(2:12)","tag":"value","value":{"contents":["8",null],"tag":"integer"}},"name":null,"span":"(2:12)-(2:12)"},{"anno":[],"expr":{"anno":[],"span":"(2:20)-(2:39)","tag":"value","value":{"contents":"projectA/data.test","tag":"string"}},"name":"file","span":"(2:15)-(2:39)"},{"anno":[],"expr":{"anno":[],"span":"(2:46)-(2:47)","tag":"value","value":{"contents":["99",null],"tag":"integer"}},"name":"err","span":"(2:42)-(2:47)"}],"span":"(2:11)-(2:48)"},"tag":"close"},"tag":"statement"}],"name":"main","span":"(1:7)-(3:9)","subprograms":null,"tag":"main"}]}'.
815+
816+
result := self visitJsonCode.
817+
818+
stmt := result first statementBlock statements first.
819+
self assert: stmt class equals: FASTFortranCloseStatement.
820+
self assert: stmt startPos equals: 26.
821+
self assert: stmt endPos equals: 67.
822+
823+
self assert: stmt ioParameters size equals: 3.
824+
825+
self assert: stmt ioParameters first class equals: FASTFortranIntegerLiteral.
826+
self assert: stmt ioParameters first startPos equals: 31.
827+
self assert: stmt ioParameters first primitiveValue equals: '8'.
828+
829+
self assert: stmt ioParameters second class equals: FASTFortranIOParameter.
830+
self assert: stmt ioParameters second startPos equals: 34.
831+
self assert: stmt ioParameters second name equals: 'file'.
832+
self assert: stmt ioParameters second expression class equals: FASTFortranCharacterLiteral.
833+
self assert: stmt ioParameters second expression primitiveValue equals: 'projectA/data.test'.
834+
835+
self assert: stmt ioParameters third class equals: FASTFortranIOParameter.
836+
self assert: stmt ioParameters third startPos equals: 61.
837+
self assert: stmt ioParameters third name equals: 'err'.
838+
]
839+
806840
{ #category : 'tests' }
807841
FortranToFASTTests >> testComment [
808842

src/FAST-Fortran-Visitors/FASTFortranExporterVisitor.class.st

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,7 @@ FASTFortranExporterVisitor >> visitFASTFortranAbstractIOStatement: aFASTFortranI
179179
self
180180
visitFASTFortranAbstractStatement: aFASTFortranIOStatement ;
181181
<< aString ;
182-
visitFASTFortranTWithIOParameters: aFASTFortranIOStatement ;
183-
visitFASTFortranTWithArguments: aFASTFortranIOStatement ;
184-
newLine
182+
visitFASTFortranTWithIOParameters: aFASTFortranIOStatement
185183
]
186184

187185
{ #category : 'visiting - statements' }
@@ -278,6 +276,14 @@ FASTFortranExporterVisitor >> visitFASTFortranCharacterType: aFASTFortranType [
278276
self visitFASTFortranType: aFASTFortranType
279277
]
280278

279+
{ #category : 'visiting - statements' }
280+
FASTFortranExporterVisitor >> visitFASTFortranCloseStatement: aFASTFortranCloseStatement [
281+
282+
self
283+
visitFASTFortranAbstractIOStatement: aFASTFortranCloseStatement named: 'close' ;
284+
newLine
285+
]
286+
281287
{ #category : 'visiting' }
282288
FASTFortranExporterVisitor >> visitFASTFortranCommonGroup: aFASTFortranCommonGroup [
283289

@@ -675,13 +681,9 @@ FASTFortranExporterVisitor >> visitFASTFortranImpliedDoExpression: aFASTFortranI
675681
{ #category : 'visiting - statements' }
676682
FASTFortranExporterVisitor >> visitFASTFortranInquireStatement: aFASTFortranInquireStatement [
677683

684+
678685
self
679-
visitFASTFortranAbstractStatement: aFASTFortranInquireStatement;
680-
<< 'inquire ';
681-
outputExpression: [
682-
self visitNodeListSeparatedByCommas:
683-
aFASTFortranInquireStatement ioParameters ]
684-
inParentheses: true;
686+
visitFASTFortranAbstractIOStatement: aFASTFortranInquireStatement named: 'inquire' ;
685687
newLine
686688
]
687689

@@ -733,13 +735,9 @@ FASTFortranExporterVisitor >> visitFASTFortranLoopControlExpression: aFASTFortra
733735
{ #category : 'visiting - statements' }
734736
FASTFortranExporterVisitor >> visitFASTFortranOpenStatement: aFASTFortranOpenStatement [
735737

738+
736739
self
737-
visitFASTFortranAbstractStatement: aFASTFortranOpenStatement;
738-
<< 'open ';
739-
outputExpression: [
740-
self visitNodeListSeparatedByCommas:
741-
aFASTFortranOpenStatement ioParameters ]
742-
inParentheses: true;
740+
visitFASTFortranAbstractIOStatement: aFASTFortranOpenStatement named: 'open' ;
743741
newLine
744742
]
745743

@@ -794,8 +792,10 @@ FASTFortranExporterVisitor >> visitFASTFortranProgramMain: aFASTFortranProgramMa
794792
FASTFortranExporterVisitor >> visitFASTFortranReadStatement: aFASTFortranReadStatement [
795793

796794
self
797-
visitFASTFortranAbstractIOStatement: aFASTFortranReadStatement
798-
named: 'read'
795+
visitFASTFortranAbstractIOStatement: aFASTFortranReadStatement named: 'read' ;
796+
space;
797+
visitFASTFortranTWithArguments: aFASTFortranReadStatement ;
798+
newLine
799799
]
800800

801801
{ #category : 'visiting' }
@@ -820,12 +820,7 @@ FASTFortranExporterVisitor >> visitFASTFortranReturnStatement: aFASTFortranTRetu
820820
FASTFortranExporterVisitor >> visitFASTFortranRewindStatement: aFASTFortranRewindStatement [
821821

822822
self
823-
visitFASTFortranAbstractStatement: aFASTFortranRewindStatement;
824-
<< 'rewind ';
825-
outputExpression: [
826-
self visitNodeListSeparatedByCommas:
827-
aFASTFortranRewindStatement ioParameters ]
828-
inParentheses: true;
823+
visitFASTFortranAbstractIOStatement: aFASTFortranRewindStatement named: 'rewind' ;
829824
newLine
830825
]
831826

@@ -928,8 +923,7 @@ FASTFortranExporterVisitor >> visitFASTFortranTWithIOParameters: aFASTFortranTWi
928923
space;
929924
outputExpression: [
930925
self visitNodeListSeparatedByCommas: aFASTFortranTWithIOParameters ioParameters ]
931-
inParentheses: true;
932-
space
926+
inParentheses: true
933927
]
934928

935929
{ #category : 'visiting - traits' }
@@ -1000,8 +994,10 @@ FASTFortranExporterVisitor >> visitFASTFortranVariableDeclarator: aFASTFortranVa
1000994
FASTFortranExporterVisitor >> visitFASTFortranWriteStatement: aFASTFortranWriteStatement [
1001995

1002996
self
1003-
visitFASTFortranAbstractIOStatement: aFASTFortranWriteStatement
1004-
named: 'write'
997+
visitFASTFortranAbstractIOStatement: aFASTFortranWriteStatement named: 'write' ;
998+
space;
999+
visitFASTFortranTWithArguments: aFASTFortranWriteStatement ;
1000+
newLine
10051001
]
10061002

10071003
{ #category : 'visiting' }

src/FAST-Fortran-Visitors/FASTFortranJsonVisitor.class.st

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,9 @@ FASTFortranJsonVisitor >> visitCloseStatement: aCloseNode [
348348
| data |
349349
data := super visitCloseStatement: aCloseNode.
350350

351-
^self newEntity: FASTFortranCloseStatement atPosition: data first
352-
351+
^(self newEntity: FASTFortranCloseStatement atPosition: data first)
352+
ioParameters: data second ;
353+
yourself
353354
]
354355

355356
{ #category : 'visiting' }

0 commit comments

Comments
 (0)