@@ -706,9 +706,7 @@ def read_vis_stmnt(line: str) -> tuple[Literal["vis"], VisInfo] | None:
706
706
]
707
707
708
708
709
- def find_external_type (
710
- file_ast : FortranAST , desc_string : str , name_stripped : str
711
- ) -> bool :
709
+ def find_external_type (file_ast : FortranAST , desc_string : str , name : str ) -> bool :
712
710
"""Encountered a variable with EXTERNAL as its type
713
711
Try and find an already defined variable with a
714
712
NORMAL Fortran Type"""
@@ -717,7 +715,7 @@ def find_external_type(
717
715
counter = 0
718
716
# Definition without EXTERNAL has already been parsed
719
717
for v in file_ast .variable_list :
720
- if name_stripped == v .name :
718
+ if name == v .name :
721
719
# If variable is already in external objs it has
722
720
# been parsed correctly so exit
723
721
if v in file_ast .external_objs :
@@ -733,17 +731,15 @@ def find_external_type(
733
731
return False
734
732
735
733
736
- def find_external_attr (
737
- file_ast : FortranAST , name_stripped : str , new_var : Variable
738
- ) -> bool :
734
+ def find_external_attr (file_ast : FortranAST , name : str , new_var : Variable ) -> bool :
739
735
"""Check if this NORMAL Fortran variable is in the external_objs with only
740
736
``EXTERNAL`` as its type. Used to detect seperated ``EXTERNAL`` declarations.
741
737
742
738
Parameters
743
739
----------
744
740
file_ast : fortran_ast
745
741
AST file
746
- name_stripped : str
742
+ name : str
747
743
Variable name, stripped
748
744
new_var : fortran_var
749
745
Fortran variable to check against
@@ -756,7 +752,7 @@ def find_external_attr(
756
752
"""
757
753
counter = 0
758
754
for v in file_ast .external_objs :
759
- if v .name != name_stripped :
755
+ if v .name != name :
760
756
continue
761
757
if v .desc .upper () != "EXTERNAL" :
762
758
continue
@@ -779,7 +775,7 @@ def find_external_attr(
779
775
def find_external (
780
776
file_ast : FortranAST ,
781
777
desc_string : str ,
782
- name_stripped : str ,
778
+ name : str ,
783
779
new_var : Variable ,
784
780
) -> bool :
785
781
"""Find a procedure, function, subroutine, etc. that has been defined as
@@ -808,7 +804,7 @@ def find_external(
808
804
AST
809
805
desc_string : str
810
806
Variable type e.g. ``REAL``, ``INTEGER``, ``EXTERNAL``
811
- name_stripped : str
807
+ name : str
812
808
Variable name
813
809
new_var : fortran_var
814
810
The line variable that we are attempting to match with an ``EXTERNAL``
@@ -820,10 +816,10 @@ def find_external(
820
816
True if the variable is ``EXTERNAL`` and we manage to link it to the
821
817
rest of its components, else False
822
818
"""
823
- if find_external_type (file_ast , desc_string , name_stripped ):
819
+ if find_external_type (file_ast , desc_string , name ):
824
820
return True
825
821
elif desc_string .upper () != "EXTERNAL" :
826
- if find_external_attr (file_ast , name_stripped , new_var ):
822
+ if find_external_attr (file_ast , name , new_var ):
827
823
return True
828
824
return False
829
825
@@ -1355,53 +1351,49 @@ def parse(
1355
1351
if obj_type == "var" :
1356
1352
if obj_info .var_names is None :
1357
1353
continue
1358
- desc_string = obj_info .var_type
1359
1354
link_name : str = None
1360
1355
procedure_def = False
1361
- if desc_string [:3 ] == "PRO" :
1356
+ if obj_info . var_type [:3 ] == "PRO" :
1362
1357
if file_ast .current_scope .get_type () == INTERFACE_TYPE_ID :
1363
1358
for var_name in obj_info .var_names :
1364
1359
file_ast .add_int_member (var_name )
1365
1360
log .debug ("%s !!! INTERFACE-PRO - Ln:%d" , line .strip (), line_no )
1366
1361
continue
1367
1362
procedure_def = True
1368
- link_name = get_paren_substring (desc_string )
1363
+ link_name = get_paren_substring (obj_info . var_type )
1369
1364
for var_name in obj_info .var_names :
1370
- desc = desc_string
1365
+ desc = obj_info . var_type
1371
1366
link_name : str = None
1372
1367
if var_name .find ("=>" ) > - 1 :
1373
1368
name_split = var_name .split ("=>" )
1374
- # TODO: rename name_raw to name
1375
- # TODO: rename name_stripped to name
1376
- # TODO: rename desc_string to desc
1377
- name_raw = name_split [0 ]
1369
+ name = name_split [0 ]
1378
1370
link_name = name_split [1 ].split ("(" )[0 ].strip ()
1379
1371
if link_name .lower () == "null" :
1380
1372
link_name = None
1381
1373
else :
1382
- name_raw = var_name .split ("=" )[0 ]
1374
+ name = var_name .split ("=" )[0 ]
1383
1375
# Add dimension if specified
1384
1376
# TODO: turn into function and add support for co-arrays i.e. [*]
1385
1377
# Copy global keywords to the individual variable
1386
1378
var_keywords : list [str ] = obj_info .keywords [:]
1387
1379
# The name starts with (
1388
- if name_raw .find ("(" ) == 0 :
1380
+ if name .find ("(" ) == 0 :
1389
1381
continue
1390
- name_raw , dims = self .parse_imp_dim (name_raw )
1391
- name_raw , char_len = self .parse_imp_char (name_raw )
1382
+ name , dims = self .parse_imp_dim (name )
1383
+ name , char_len = self .parse_imp_char (name )
1392
1384
if dims :
1393
1385
var_keywords .append (dims )
1394
1386
if char_len :
1395
1387
desc += char_len
1396
1388
1397
- name_stripped = name_raw .strip ()
1389
+ name = name .strip ()
1398
1390
keywords , keyword_info = map_keywords (var_keywords )
1399
1391
1400
1392
if procedure_def :
1401
1393
new_var = Method (
1402
1394
file_ast ,
1403
1395
line_no ,
1404
- name_stripped ,
1396
+ name ,
1405
1397
desc ,
1406
1398
keywords ,
1407
1399
keyword_info = keyword_info ,
@@ -1411,7 +1403,7 @@ def parse(
1411
1403
new_var = Variable (
1412
1404
file_ast ,
1413
1405
line_no ,
1414
- name_stripped ,
1406
+ name ,
1415
1407
desc ,
1416
1408
keywords ,
1417
1409
keyword_info = keyword_info ,
@@ -1421,14 +1413,14 @@ def parse(
1421
1413
# If the object is fortran_var and a parameter include
1422
1414
# the value in hover
1423
1415
if new_var .is_parameter ():
1424
- _ , col = find_word_in_line (line , name_stripped )
1416
+ _ , col = find_word_in_line (line , name )
1425
1417
match = FRegex .PARAMETER_VAL .match (line [col :])
1426
1418
if match :
1427
1419
var = match .group (1 ).strip ()
1428
1420
new_var .set_parameter_val (var )
1429
1421
1430
1422
# Check if the "variable" is external and if so cycle
1431
- if find_external (file_ast , desc , name_stripped , new_var ):
1423
+ if find_external (file_ast , desc , name , new_var ):
1432
1424
continue
1433
1425
1434
1426
# if not merge_external:
0 commit comments