Skip to content

Commit 497d915

Browse files
Merge pull request #224 from moosetechnology/pure-fortran
Adding options : - `withEsope`, `noEsope` allowing to run without Esope (default is withEsope) - indicate `fortranVersion` to the parser
2 parents cbcdcc4 + f64a870 commit 497d915

File tree

1 file changed

+49
-4
lines changed

1 file changed

+49
-4
lines changed

src/EsopeImporter/FortranProjectImporter.class.st

+49-4
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ Class {
7272
'resolver',
7373
'withSanityChecks',
7474
'includeFolder',
75-
'srcFolder'
75+
'srcFolder',
76+
'withEsope',
77+
'fortranVersion'
7678
],
7779
#category : 'EsopeImporter-Importer',
7880
#package : 'EsopeImporter',
@@ -89,7 +91,7 @@ FortranProjectImporter class >> extensionsEsope [
8991
{ #category : 'constants' }
9092
FortranProjectImporter class >> extensionsFortran [
9193

92-
^#(f for)
94+
^#(f for F90)
9395
]
9496

9597
{ #category : 'importing' }
@@ -224,6 +226,13 @@ FortranProjectImporter >> defaultFileEncoding: aString [
224226
defaultFileEncoding := aString
225227
]
226228

229+
{ #category : 'accessing' }
230+
FortranProjectImporter >> defaultFortranVersion [
231+
"known Fortran versions: Fortran[66/77/77Legacy/77Extended/90/2003]
232+
66 77 77l 77e 90 2003"
233+
^'77l'
234+
]
235+
227236
{ #category : 'private - files' }
228237
FortranProjectImporter >> ensureEmptyFolder: folder [
229238

@@ -255,6 +264,8 @@ FortranProjectImporter >> esopeToFortran [
255264
"'de-esopifying Esope files to be able to parse them in Fortran
256265
The result goes in the FortranWorkingDirectory"
257266

267+
withEsope ifFalse: [ ^self ].
268+
258269
(self collectFilesIn: self tempEsopeFolder) do: [ :path |
259270
self
260271
deEsopify: path
@@ -273,7 +284,7 @@ FortranProjectImporter >> esopeToFortran [
273284
{ #category : 'accessing' }
274285
FortranProjectImporter >> f77parser [
275286

276-
^ 'fortran-src-extras serialize -t json -v77l encode '
287+
^ 'fortran-src-extras serialize -t json -v' , self fortranVersion , ' encode '
277288
]
278289

279290
{ #category : 'private - import' }
@@ -334,6 +345,19 @@ FortranProjectImporter >> fortranToJsonAST [
334345
self parseFortran77: projectPath from: srcFolder to: self tempJsonFolder / 'src' ]
335346
]
336347

348+
{ #category : 'accessing' }
349+
FortranProjectImporter >> fortranVersion [
350+
351+
^fortranVersion ifNil: [ self defaultFortranVersion ]
352+
]
353+
354+
{ #category : 'accessing' }
355+
FortranProjectImporter >> fortranVersion: version [
356+
(#('66' '77' '77l' '77e' '90' '2003') includes: version)
357+
ifFalse: [ Error signal: 'Unknown Fortran version: ' , version , ' choose one of 66 77 77l 77e 90 2003' ].
358+
fortranVersion := version
359+
]
360+
337361
{ #category : 'private - files' }
338362
FortranProjectImporter >> getIncludedFileName: aString [
339363

@@ -434,6 +458,8 @@ FortranProjectImporter >> includeFolder: folder [
434458
{ #category : 'run' }
435459
FortranProjectImporter >> includedFilesToEsope [
436460

461+
withEsope ifFalse: [ ^self ].
462+
437463
self collectIncludedFileNames
438464
do: [ :fileName |
439465
errorHandler enterContext: fileName.
@@ -472,7 +498,10 @@ FortranProjectImporter >> initialize [
472498

473499
super initialize.
474500

475-
errorHandler := FortranErrorManager new
501+
withEsope := true.
502+
503+
errorHandler := FortranErrorManager new.
504+
errorHandler stopOnError: self stopOnError.
476505

477506
]
478507

@@ -498,13 +527,17 @@ FortranProjectImporter >> jsonASTToIAST [
498527
iastEntity := nil.
499528
jsonDOM := nil.
500529
errorHandler enterContext: jsonFile fullName.
530+
501531
[ jsonDOM := NeoJSONReader fromString: code ]
502532
on: NeoJSONParseError
503533
do: [ JsonASTParseException signal: code ].
534+
504535
jsonDOM ifNotNil: [ iastEntity := visitor visitProgramFile: jsonDOM ].
536+
505537
errorHandler leaveContext.
506538
iastEntity
507539
]
540+
thenReject: #isNil
508541

509542
]
510543

@@ -521,6 +554,12 @@ FortranProjectImporter >> newResolver [
521554
errorHandler: errorHandler
522555
]
523556

557+
{ #category : 'accessing' }
558+
FortranProjectImporter >> noEsope [
559+
560+
withEsope := false
561+
]
562+
524563
{ #category : 'private - import' }
525564
FortranProjectImporter >> parseFortran77: srcFile from: srcDir to: destDir [
526565
"runs fortran77 parser on localPath in srcDir to JSON file in destDir"
@@ -665,6 +704,12 @@ FortranProjectImporter >> unquoteIncludedFile: fileName [
665704
ifFalse: [ fileName ]
666705
]
667706

707+
{ #category : 'accessing' }
708+
FortranProjectImporter >> withEsope [
709+
710+
^withEsope
711+
]
712+
668713
{ #category : 'accessing' }
669714
FortranProjectImporter >> withSanityChecks [
670715

0 commit comments

Comments
 (0)