@@ -1087,8 +1087,8 @@ def __init__(
1087
1087
args : str = "" ,
1088
1088
mod_flag : bool = False ,
1089
1089
keywords : list = None ,
1090
- return_type = None ,
1091
- result_var = None ,
1090
+ result_type : list [ str ] = None , # TODO: make this a string
1091
+ result_name : str = None ,
1092
1092
):
1093
1093
super ().__init__ (file_ast , line_number , name , args , mod_flag , keywords )
1094
1094
self .args : str = args .replace (" " , "" ).lower ()
@@ -1097,65 +1097,69 @@ def __init__(
1097
1097
self .in_children : list = []
1098
1098
self .missing_args : list = []
1099
1099
self .mod_scope : bool = mod_flag
1100
- self .result_var = result_var
1101
- self .result_obj = None
1102
- self .return_type = None
1103
- if return_type is not None :
1104
- self .return_type = return_type [0 ]
1100
+ self .result_name : str = result_name
1101
+ self .result_type : str = None
1102
+ self .result_obj : fortran_var = None
1103
+ if result_type :
1104
+ self .result_type = result_type [0 ]
1105
+ # Set the implicit result() name to be the function name
1106
+ if self .result_name is None :
1107
+ self .result_name = self .name
1105
1108
1106
1109
def copy_interface (self , copy_source : fortran_function ):
1107
1110
# Call the parent class method
1108
1111
child_names = super ().copy_interface (copy_source )
1109
1112
# Return specific options
1110
- self .result_var = copy_source .result_var
1113
+ self .result_name = copy_source .result_name
1114
+ self .result_type = copy_source .result_type
1111
1115
self .result_obj = copy_source .result_obj
1112
1116
if copy_source .result_obj is not None :
1113
1117
if copy_source .result_obj .name .lower () not in child_names :
1114
1118
self .in_children .append (copy_source .result_obj )
1115
1119
1116
1120
def resolve_link (self , obj_tree ):
1117
1121
self .resolve_arg_link (obj_tree )
1118
- if self .result_var is not None :
1119
- result_var_lower = self .result_var .lower ()
1120
- for child in self .children :
1121
- if child .name .lower () == result_var_lower :
1122
- self .result_obj = child
1122
+ result_var_lower = self .result_name .lower ()
1123
+ for child in self .children :
1124
+ if child .name .lower () == result_var_lower :
1125
+ self .result_obj = child
1126
+ # Update result value and type
1127
+ self .result_name = child .name
1128
+ self .result_type = child .get_desc ()
1123
1129
1124
1130
def get_type (self , no_link = False ):
1125
1131
return FUNCTION_TYPE_ID
1126
1132
1127
1133
def get_desc (self ):
1128
- if self .result_obj is not None :
1129
- return self .result_obj .get_desc () + " FUNCTION"
1130
- if self .return_type is not None :
1131
- return self .return_type + " FUNCTION"
1134
+ if self .result_type :
1135
+ return self .result_type + " FUNCTION"
1132
1136
return "FUNCTION"
1133
1137
1134
1138
def is_callable (self ):
1135
1139
return False
1136
1140
1137
1141
def get_hover (self , long = False , include_doc = True , drop_arg = - 1 ):
1138
1142
fun_sig , _ = self .get_snippet (drop_arg = drop_arg )
1139
- fun_return = ""
1140
- if self .result_obj is not None :
1141
- fun_return , _ = self .result_obj .get_hover (include_doc = False )
1142
- if self .return_type is not None :
1143
- fun_return = self .return_type
1144
- keyword_list = get_keywords (self .keywords )
1143
+ fun_sig += f" RESULT({ self .result_name } )"
1144
+ keyword_list = []
1145
+ if self .result_type :
1146
+ keyword_list .append (self .result_type )
1147
+ keyword_list += get_keywords (self .keywords )
1145
1148
keyword_list .append ("FUNCTION" )
1146
- hover_array = [f"{ fun_return } { ' ' .join (keyword_list )} { fun_sig } " ]
1149
+
1150
+ hover_array = [f"{ ' ' .join (keyword_list )} { fun_sig } " ]
1147
1151
self .get_docs_full (hover_array , long , include_doc , drop_arg )
1148
1152
return "\n " .join (hover_array ), long
1149
1153
1150
1154
def get_interface (self , name_replace = None , change_arg = - 1 , change_strings = None ):
1151
1155
fun_sig , _ = self .get_snippet (name_replace = name_replace )
1156
+ fun_sig += f" RESULT({ self .result_name } )"
1152
1157
keyword_list = []
1153
- if self .return_type is not None :
1154
- keyword_list .append (self .return_type )
1155
- if self .result_obj is not None :
1156
- fun_sig += f" RESULT({ self .result_obj .name } )"
1158
+ if self .result_type :
1159
+ keyword_list .append (self .result_type )
1157
1160
keyword_list += get_keywords (self .keywords )
1158
1161
keyword_list .append ("FUNCTION " )
1162
+
1159
1163
interface_array = self .get_interface_array (
1160
1164
keyword_list , fun_sig , change_arg , change_strings
1161
1165
)
0 commit comments