Skip to content

Commit e33b8c3

Browse files
authored
Merge pull request #194 from moosetechnology/sourceAnchor
Source anchor
2 parents 1bc6ecc + 5bec3e9 commit e33b8c3

File tree

4 files changed

+117
-0
lines changed

4 files changed

+117
-0
lines changed

src/EsopeImporter-Tests/FamixEsopeResolverTest.class.st

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,63 @@ FamixEsopeResolverTest >> testResolveDeclaredTypeOfPointersStubSegment [
690690

691691
]
692692

693+
{ #category : 'test - resolveAccess' }
694+
FamixEsopeResolverTest >> testResolveExternalFunction [
695+
"subroutine sub
696+
integer n
697+
external fct
698+
integer fct
699+
end
700+
"
701+
702+
| subroutine |
703+
704+
subroutine := (self defaultSubroutine: 'main')
705+
addLocalVariable: (self defaultVariable: 'aVar' withType: #integer) ;
706+
addExternalDeclaration: (self externalDeclaration: 'fct') ;
707+
addLocalVariable: (self defaultVariable: 'fct' withType: #integer) ;
708+
yourself.
709+
710+
self assert: subroutine localVariables size equals: 2.
711+
self assert: subroutine externalDeclarations size equals: 1.
712+
713+
resolver resolve.
714+
715+
self assert: subroutine localVariables size equals: 1.
716+
self assert: (resolver model allWithType: FamixF77Variable) size equals: 1.
717+
self assert: subroutine localVariables anyOne name equals: 'aVar'.
718+
719+
self assert: subroutine externalDeclarations size equals: 1.
720+
self assert: (resolver model allWithType: FamixF77ExternalDeclaration) size equals: 1.
721+
self assert: (resolver model allWithType: FamixF77ExternalDeclaration) anyOne name equals: 'fct'.
722+
]
723+
724+
{ #category : 'test - resolveAccess' }
725+
FamixEsopeResolverTest >> testResolveExternalFunctionWithoutVariableDeclaration [
726+
"subroutine sub
727+
external fct
728+
end
729+
"
730+
731+
| subroutine |
732+
733+
subroutine := (self defaultSubroutine: 'main')
734+
addExternalDeclaration: (self externalDeclaration: 'fct') ;
735+
yourself.
736+
737+
self assert: subroutine localVariables size equals: 0.
738+
self assert: subroutine externalDeclarations size equals: 1.
739+
740+
resolver resolve.
741+
742+
self assert: subroutine localVariables size equals: 0.
743+
self assert: (resolver model allWithType: FamixF77Variable) size equals: 0.
744+
745+
self assert: subroutine externalDeclarations size equals: 1.
746+
self assert: (resolver model allWithType: FamixF77ExternalDeclaration) size equals: 1.
747+
self assert: (resolver model allWithType: FamixF77ExternalDeclaration) anyOne name equals: 'fct'.
748+
]
749+
693750
{ #category : 'test - implicit' }
694751
FamixEsopeResolverTest >> testResolveFunctionNameAsNonLocalVariable [
695752

src/EsopeImporter-Tests/IASTToFamixVisitorTest.class.st

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,38 @@ c ptr.attr(/1)
679679
equals: 'ptr'
680680
]
681681

682+
{ #category : 'tests-fortran' }
683+
IASTToFamixVisitorTest >> testFamixExternalDeclaration [
684+
685+
| entity external iastVar |
686+
687+
iastVar := self defaultVarAccess: 'fct' isWrite: false.
688+
iastVar annotations: 'external'.
689+
690+
programFile body: { IASTSubroutine new
691+
entityName: 'sub';
692+
body: { iastVar } ;
693+
yourself
694+
}.
695+
696+
entity := programFile accept: visitor.
697+
698+
self assert: entity programUnits size equals: 1.
699+
700+
entity := entity programUnits first.
701+
self assert: entity class equals: FamixF77PUSubroutine.
702+
self assert: entity name equals: 'sub'.
703+
self assert: entity programFile isNotNil.
704+
705+
self assert: entity accesses size equals: 0.
706+
self assert: entity externalDeclarations size equals: 1.
707+
708+
external := entity externalDeclarations anyOne.
709+
self assert: external class equals: FamixF77ExternalDeclaration.
710+
self assert: external name equals: 'fct'.
711+
self assert: external programUnit equals: entity.
712+
]
713+
682714
{ #category : 'tests-fortran' }
683715
IASTToFamixVisitorTest >> testFamixFortran77 [
684716

src/EsopeImporter-Tests/JsonToIASTVisitorTest.class.st

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,32 @@ c@_ IF (N.GT.0) SEGINI P
854854
self assert: seg sourceAnchor endColumn equals: 29
855855
]
856856

857+
{ #category : 'tests-progUnit' }
858+
JsonToIASTVisitorTest >> testExternalStatement [
859+
"external fct"
860+
| programFile stmt |
861+
programFile := self visitJsonCode: '{"meta":{"miVersion":"fortran77","miFilename":"./fortran77.f"},"program_units":[{"anno":[],"blocks":[{"anno":[],"label":null,"span":"(2:7)-(2:18)","statement":{"anno":[],"span":"(2:7)-(2:18)","tag":"external","vars":{"anno":[],"list":[{"anno":[],"span":"(2:16)-(2:18)","tag":"value","value":{"contents":"fct","tag":"variable"}}],"span":"(2:16)-(2:18)"}},"tag":"statement"}],"name":"main","span":"(1:7)-(3:9)","subprograms":null,"tag":"main"}]}'.
862+
863+
self assert: programFile body size equals: 1.
864+
stmt := programFile body first.
865+
self assert: stmt class equals: IASTMainProgram.
866+
self assert: stmt body size equals: 1.
867+
stmt := stmt body anyOne first.
868+
869+
self assert: stmt class equals: IASTVarAccess.
870+
self assert: stmt entityName equals: 'fct'.
871+
self assert: stmt annotations equals: 'external'.
872+
873+
self assert: stmt sourceAnchor notNil.
874+
self assert: stmt sourceAnchor class equals: IASTIndexedFileAnchor.
875+
self assert: stmt sourceAnchor fileName equals: './fortran77.f'.
876+
self assert: stmt sourceAnchor startLine equals: 2.
877+
self assert: stmt sourceAnchor startColumn equals: 16.
878+
self assert: stmt sourceAnchor endLine equals: 2.
879+
self assert: stmt sourceAnchor endColumn equals: 19.
880+
881+
]
882+
857883
{ #category : 'tests-statement' }
858884
JsonToIASTVisitorTest >> testFunctionWithFunctionInvocation [
859885
" integer function efunc()

src/EsopeImporter/IASTToFamixFortranVisitor.class.st

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ IASTToFamixFortranVisitor >> visitIASTInclude: anInclude [
206206
{ #category : 'visiting' }
207207
IASTToFamixFortranVisitor >> visitIASTIncludedFile: anIncludedFile [
208208

209+
self flag: '#FIXME: error with sourceAnchor'.
210+
209211
anIncludedFile sourceAnchor
210212
startLine: anIncludedFile sourceAnchor startLine + 1;
211213
endLine: anIncludedFile sourceAnchor endLine - 1.

0 commit comments

Comments
 (0)