Skip to content

Commit 20facab

Browse files
Spartak EhrlichNeoQuix
authored andcommitted
Changes01
1 parent 2e889dd commit 20facab

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

decompiler/pipeline/controlflowanalysis/variable_name_generation.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import string
12
from abc import ABC, abstractmethod
23
from enum import Enum
34
from typing import List, Set
@@ -18,9 +19,9 @@ def get_variables(self) -> list[Variable]:
1819
"""Get collected variables."""
1920
return self._variables
2021

21-
def visit_variable(self, expression: Variable):
22+
def visit_variable(self, var: Variable):
2223
"""Add visited variables to list"""
23-
self._variables.append(expression)
24+
self._variables.append(var)
2425

2526

2627
class NamingConvention(str, Enum):
@@ -36,9 +37,9 @@ class RenamingScheme(ABC):
3637
def __init__(self, task: DecompilerTask) -> None:
3738
"""Collets all needed variables for renaming + filters which should not be renamed"""
3839
collector = VariableCollector()
39-
collector.visit_ast(task._ast)
40-
self._ast = task._ast
41-
self._params: List[Variable] = task._function_parameters
40+
collector.visit_ast(task.syntax_tree)
41+
self._ast = task.syntax_tree
42+
self._params: List[Variable] = task.function_parameters
4243
self._variables: Set[Variable] = set(filter(self._filter_variables, collector.get_variables()))
4344

4445

@@ -54,7 +55,7 @@ def renameVariables(self):
5455
"""Rename all collected variables with a naming scheme."""
5556
names: dict[Variable, Variable] = {}
5657
for var in self._variables:
57-
names[var] = var.copy(self.getVariableName(var))
58+
names[var] = var.copy(name=self.getVariableName(var))
5859

5960
self._ast.replace_variables_in_subtree(self._ast.root, names)
6061

@@ -93,18 +94,19 @@ def _get_counter(self, var: Variable) -> Integer:
9394

9495

9596
def _get_name_identifier(self, name: str) -> str:
96-
"""Return identifier by purging non alpha chars + capitalize the string. If string is too short, return generic"""
97+
"""Return identifier by purging non alpha chars + capitalize the char afterwards. If string is too short, return generic"""
9798
if len(name) < 2:
98-
return "Var"
99-
return "".join(filter(str.isalpha, name)).capitalize()
99+
return "var"
100+
x = string.capwords("".join([c if c.isalnum() else " " for c in name]))
101+
x = x[0].lower() + x[1:]
102+
return "".join(filter(str.isalpha, x))
100103

101104

102105
def getVariableName(self, var: Variable) -> str:
103106
"""Return hungarian notation to a given variable. If no prefix exists, make the first char lower case."""
104107
newName = self._get_name_identifier(var._name)
105108
if (prefix := self._hungarian_prefix(var.type)):
106-
return f"{prefix}{self._type_separator}{newName}{self._counter_separator}{self._get_counter(var.name)}"
107-
newName = newName[0].lower() + newName[1:]
109+
return f"{prefix}{self._type_separator}{newName.capitalize()}{self._counter_separator}{self._get_counter(var.name)}"
108110
return f"{newName}{self._counter_separator}{self._get_counter(var.name)}"
109111

110112
def _hungarian_prefix(self, var_type: Type) -> str:

0 commit comments

Comments
 (0)