also support reference id for legacy AST

pull/2121/head
alpharush 1 year ago
parent 6efc9daea2
commit 25d1c6e61e
  1. 9
      slither/solc_parsing/expressions/expression_parsing.py
  2. 6
      slither/solc_parsing/expressions/find_variable.py

@ -486,13 +486,18 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression)
t = None t = None
referenced_declaration = None
if caller_context.is_compact_ast: if caller_context.is_compact_ast:
value = expression["name"] value = expression["name"]
t = expression["typeDescriptions"]["typeString"] t = expression["typeDescriptions"]["typeString"]
if "referencedDeclaration" in expression:
referenced_declaration = expression["referencedDeclaration"]
else: else:
value = expression["attributes"]["value"] value = expression["attributes"]["value"]
if "type" in expression["attributes"]: if "type" in expression["attributes"]:
t = expression["attributes"]["type"] t = expression["attributes"]["type"]
if "referencedDeclaration" in expression["attributes"]:
referenced_declaration = expression["attributes"]["referencedDeclaration"]
if t: if t:
found = re.findall(r"[struct|enum|function|modifier] \(([\[\] ()a-zA-Z0-9\.,_]*)\)", t) found = re.findall(r"[struct|enum|function|modifier] \(([\[\] ()a-zA-Z0-9\.,_]*)\)", t)
@ -501,10 +506,6 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression)
value = value + "(" + found[0] + ")" value = value + "(" + found[0] + ")"
value = filter_name(value) value = filter_name(value)
if "referencedDeclaration" in expression:
referenced_declaration = expression["referencedDeclaration"]
else:
referenced_declaration = None
var, was_created = find_variable(value, caller_context, referenced_declaration) var, was_created = find_variable(value, caller_context, referenced_declaration)
if was_created: if was_created:
var.set_offset(src, caller_context.compilation_unit) var.set_offset(src, caller_context.compilation_unit)

@ -63,10 +63,8 @@ def _find_variable_from_ref_declaration(
if referenced_declaration is None: if referenced_declaration is None:
return None return None
# We look for variable declared with the referencedDeclaration attribute # We look for variable declared with the referencedDeclaration attribute
if function_parser is not None: if function_parser is not None and referenced_declaration in function_parser.variables_renamed:
func_variables_renamed = function_parser.variables_renamed return function_parser.variables_renamed[referenced_declaration].underlying_variable
if referenced_declaration in func_variables_renamed:
return func_variables_renamed[referenced_declaration].underlying_variable
if ( if (
contract_declarer is not None contract_declarer is not None

Loading…
Cancel
Save