@@ -72,7 +72,9 @@ Class {
72
72
' resolver' ,
73
73
' withSanityChecks' ,
74
74
' includeFolder' ,
75
- ' srcFolder'
75
+ ' srcFolder' ,
76
+ ' withEsope' ,
77
+ ' fortranVersion'
76
78
],
77
79
#category : ' EsopeImporter-Importer' ,
78
80
#package : ' EsopeImporter' ,
@@ -89,7 +91,7 @@ FortranProjectImporter class >> extensionsEsope [
89
91
{ #category : ' constants' }
90
92
FortranProjectImporter class >> extensionsFortran [
91
93
92
- ^ #(f for)
94
+ ^ #(f for F90 )
93
95
]
94
96
95
97
{ #category : ' importing' }
@@ -224,6 +226,13 @@ FortranProjectImporter >> defaultFileEncoding: aString [
224
226
defaultFileEncoding := aString
225
227
]
226
228
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
+
227
236
{ #category : ' private - files' }
228
237
FortranProjectImporter >> ensureEmptyFolder: folder [
229
238
@@ -255,6 +264,8 @@ FortranProjectImporter >> esopeToFortran [
255
264
" 'de-esopifying Esope files to be able to parse them in Fortran
256
265
The result goes in the FortranWorkingDirectory"
257
266
267
+ withEsope ifFalse: [ ^ self ].
268
+
258
269
(self collectFilesIn: self tempEsopeFolder) do: [ :path |
259
270
self
260
271
deEsopify: path
@@ -273,7 +284,7 @@ FortranProjectImporter >> esopeToFortran [
273
284
{ #category : ' accessing' }
274
285
FortranProjectImporter >> f77parser [
275
286
276
- ^ ' fortran-src-extras serialize -t json -v77l encode '
287
+ ^ ' fortran-src-extras serialize -t json -v ' , self fortranVersion , ' encode '
277
288
]
278
289
279
290
{ #category : ' private - import' }
@@ -334,6 +345,19 @@ FortranProjectImporter >> fortranToJsonAST [
334
345
self parseFortran77: projectPath from: srcFolder to: self tempJsonFolder / ' src' ]
335
346
]
336
347
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
+
337
361
{ #category : ' private - files' }
338
362
FortranProjectImporter >> getIncludedFileName: aString [
339
363
@@ -434,6 +458,8 @@ FortranProjectImporter >> includeFolder: folder [
434
458
{ #category : ' run' }
435
459
FortranProjectImporter >> includedFilesToEsope [
436
460
461
+ withEsope ifFalse: [ ^ self ].
462
+
437
463
self collectIncludedFileNames
438
464
do: [ :fileName |
439
465
errorHandler enterContext: fileName.
@@ -472,7 +498,10 @@ FortranProjectImporter >> initialize [
472
498
473
499
super initialize.
474
500
475
- errorHandler := FortranErrorManager new
501
+ withEsope := true .
502
+
503
+ errorHandler := FortranErrorManager new .
504
+ errorHandler stopOnError: self stopOnError.
476
505
477
506
]
478
507
@@ -498,13 +527,17 @@ FortranProjectImporter >> jsonASTToIAST [
498
527
iastEntity := nil .
499
528
jsonDOM := nil .
500
529
errorHandler enterContext: jsonFile fullName.
530
+
501
531
[ jsonDOM := NeoJSONReader fromString: code ]
502
532
on: NeoJSONParseError
503
533
do: [ JsonASTParseException signal : code ].
534
+
504
535
jsonDOM ifNotNil: [ iastEntity := visitor visitProgramFile: jsonDOM ].
536
+
505
537
errorHandler leaveContext.
506
538
iastEntity
507
539
]
540
+ thenReject: #isNil
508
541
509
542
]
510
543
@@ -521,6 +554,12 @@ FortranProjectImporter >> newResolver [
521
554
errorHandler: errorHandler
522
555
]
523
556
557
+ { #category : ' accessing' }
558
+ FortranProjectImporter >> noEsope [
559
+
560
+ withEsope := false
561
+ ]
562
+
524
563
{ #category : ' private - import' }
525
564
FortranProjectImporter >> parseFortran77: srcFile from: srcDir to: destDir [
526
565
" runs fortran77 parser on localPath in srcDir to JSON file in destDir"
@@ -665,6 +704,12 @@ FortranProjectImporter >> unquoteIncludedFile: fileName [
665
704
ifFalse: [ fileName ]
666
705
]
667
706
707
+ { #category : ' accessing' }
708
+ FortranProjectImporter >> withEsope [
709
+
710
+ ^ withEsope
711
+ ]
712
+
668
713
{ #category : ' accessing' }
669
714
FortranProjectImporter >> withSanityChecks [
670
715
0 commit comments