Skip to content

Commit ea89668

Browse files
authored
Merge pull request #200 from moosetechnology/fix-nonesopevariables
Fix nonesopevariables
2 parents 098e751 + 5c26319 commit ea89668

File tree

4 files changed

+29
-10
lines changed

4 files changed

+29
-10
lines changed

src/EsopeImporter-Tests/FamixEsopeResolverTest.class.st

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1251,7 +1251,7 @@ FamixEsopeResolverTest >> testResolveSegmentWithAttributes [
12511251
ENDSEGMENT
12521252
end
12531253
"
1254-
segment := self defaultSegment: 'PSTR' with: {
1254+
segment := self defaultSegment: 'PSTR' with: {
12551255
(#NOMCOD -> #character).
12561256
(#DATE -> #character) }.
12571257

src/EsopeImporter/FamixEsopeResolver.class.st

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ FamixEsopeResolver >> resolveAttributeAccess: anAccess forPointer: aPointerVaria
315315
FamixEsopeResolver >> resolveDeclaredTypeOfPointers [
316316
"sets the declaredType of pointers"
317317

318-
(self model allWithSubTypesOf: FamixF77Variable)
318+
(self model allWithType: FamixF77Variable)
319319
do: [ :var |
320320
var isEsope ifTrue: [ self resolveEsopeVariable: var ]
321321
].
@@ -342,11 +342,13 @@ FamixEsopeResolver >> resolveEsopeVariable: aFamixVariable [
342342
ifNotNil: [ :declaredSegmentName | declaredSegmentName ].
343343

344344
segment := allSegments
345-
detect: [ :seg | seg name = segmentName ]
346-
ifNone: [ self model newSegment
347-
name: segmentName ;
348-
isStub: true ;
349-
yourself
345+
detect: [ :seg | seg name asLowercase = segmentName asLowercase ]
346+
ifNone: [
347+
self flag: 'WARGNING: If any segment with this found in the model, we create stub one'.
348+
self model newSegment
349+
name: segmentName ;
350+
isStub: true ;
351+
yourself
350352
].
351353

352354
aFamixVariable declaredType: segment.

src/EsopeImporter/IASTToFamixEsopeVisitor.class.st

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ IASTToFamixEsopeVisitor >> checkForModSuffix: aFamixEsopeCommand [
2424
]
2525
]
2626

27+
{ #category : 'visiting' }
28+
IASTToFamixEsopeVisitor >> isAFortranIntrinsicType: typeName [
29+
30+
^ (#( character integer logical complex real 'double precision' )
31+
includes: typeName) not
32+
]
33+
2734
{ #category : 'private-creation' }
2835
IASTToFamixEsopeVisitor >> newType: typeName sourceAnchor: sourceAnchor [
2936

@@ -36,8 +43,8 @@ IASTToFamixEsopeVisitor >> newType: typeName sourceAnchor: sourceAnchor [
3643
IASTToFamixEsopeVisitor >> visitIASTEsopePointer: aPointerVar [
3744

3845
| varsNames pointer |
39-
varsNames := aPointerVar entityName substrings: '.'.
40-
46+
varsNames := $. split: aPointerVar entityName.
47+
4148
pointer := (self model newVariableNamed: varsNames first)
4249
sourceAnchor: (self visitIndexedFileAnchor: aPointerVar sourceAnchor);
4350
isEsope: true;
@@ -70,6 +77,11 @@ IASTToFamixEsopeVisitor >> visitIASTEsopeSegCommand: aSegmentCommand [
7077
IASTToFamixEsopeVisitor >> visitIASTEsopeSegment: aSegment [
7178

7279
| segment |
80+
81+
self flag: '#TODO: if we have accesses in the segment, we have to deal with them
82+
see visitIASTVariable:
83+
'.
84+
7385
segment := self model newSegment
7486
sourceAnchor:
7587
(self visitIndexedFileAnchor: aSegment sourceAnchor) ;
@@ -78,7 +90,7 @@ IASTToFamixEsopeVisitor >> visitIASTEsopeSegment: aSegment [
7890
stack push: segment.
7991
self createSymbolTableFor: segment.
8092
segment attributes: (aSegment declarations collect: [ :variable |
81-
variable isEsope: true.
93+
variable isEsope: (self isAFortranIntrinsicType: variable typeSpec entityName).
8294
variable accept: (self spawn: IASTToFamixFortranVisitor) ]).
8395

8496
^ stack pop

src/EsopeImporter/IASTToFamixFortranVisitor.class.st

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,11 @@ IASTToFamixFortranVisitor >> visitIASTVarEsoSl: aVarEso [
336336
IASTToFamixFortranVisitor >> visitIASTVariable: aVariable [
337337

338338
| var |
339+
self flag: '#TODO: we need to visit aVariable dimensions if any
340+
- In case of segment: add it as parameter (subclass of access)
341+
- For ProgramUnit add it as access
342+
'.
343+
339344
var := (self newEntity: stack top localVariableClass)
340345
sourceAnchor:
341346
(self visitIndexedFileAnchor: aVariable sourceAnchor);

0 commit comments

Comments
 (0)