Skip to content

Commit

Permalink
also support reference id for legacy AST
Browse files Browse the repository at this point in the history
  • Loading branch information
0xalpharush committed Sep 8, 2023
1 parent 6efc9da commit 25d1c6e
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 8 deletions.
9 changes: 5 additions & 4 deletions slither/solc_parsing/expressions/expression_parsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,13 +486,18 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression)

t = None

referenced_declaration = None
if caller_context.is_compact_ast:
value = expression["name"]
t = expression["typeDescriptions"]["typeString"]
if "referencedDeclaration" in expression:
referenced_declaration = expression["referencedDeclaration"]
else:
value = expression["attributes"]["value"]
if "type" in expression["attributes"]:
t = expression["attributes"]["type"]
if "referencedDeclaration" in expression["attributes"]:
referenced_declaration = expression["attributes"]["referencedDeclaration"]

if t:
found = re.findall(r"[struct|enum|function|modifier] \(([\[\] ()a-zA-Z0-9\.,_]*)\)", t)
Expand All @@ -501,10 +506,6 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression)
value = value + "(" + found[0] + ")"
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)
if was_created:
var.set_offset(src, caller_context.compilation_unit)
Expand Down
6 changes: 2 additions & 4 deletions slither/solc_parsing/expressions/find_variable.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,8 @@ def _find_variable_from_ref_declaration(
if referenced_declaration is None:
return None
# We look for variable declared with the referencedDeclaration attribute
if function_parser is not None:
func_variables_renamed = function_parser.variables_renamed
if referenced_declaration in func_variables_renamed:
return func_variables_renamed[referenced_declaration].underlying_variable
if function_parser is not None and referenced_declaration in function_parser.variables_renamed:
return function_parser.variables_renamed[referenced_declaration].underlying_variable

if (
contract_declarer is not None
Expand Down

0 comments on commit 25d1c6e

Please sign in to comment.