Simplify variables grabber

This commit is contained in:
aNNiMON 2023-10-02 19:32:45 +03:00 committed by Victor Melnik
parent 8a4dcde2a1
commit 3e661c81c4

View File

@ -36,12 +36,11 @@ public class VariablesGrabber extends OptimizationVisitor<Map<String, VariableIn
} }
final String variableName = ((VariableExpression) s.target).name; final String variableName = ((VariableExpression) s.target).name;
final VariableInfo var = variableInfo(t, variableName); final VariableInfo var = grabVariableInfo(t, variableName);
if (s.operation == null && isValue(s.expression)) { if (s.operation == null && isValue(s.expression)) {
var.value = ((ValueExpression) s.expression).value; var.value = ((ValueExpression) s.expression).value;
} }
t.put(variableName, var);
return super.visit(s, t); return super.visit(s, t);
} }
@ -49,21 +48,21 @@ public class VariablesGrabber extends OptimizationVisitor<Map<String, VariableIn
public Node visit(DestructuringAssignmentStatement s, Map<String, VariableInfo> t) { public Node visit(DestructuringAssignmentStatement s, Map<String, VariableInfo> t) {
for (String variableName : s.variables) { for (String variableName : s.variables) {
if (variableName == null) continue; if (variableName == null) continue;
t.put(variableName, variableInfo(t, variableName)); grabVariableInfo(t, variableName);
} }
return super.visit(s, t); return super.visit(s, t);
} }
@Override @Override
public Node visit(ForeachArrayStatement s, Map<String, VariableInfo> t) { public Node visit(ForeachArrayStatement s, Map<String, VariableInfo> t) {
t.put(s.variable, variableInfo(t, s.variable)); grabVariableInfo(t, s.variable);
return super.visit(s, t); return super.visit(s, t);
} }
@Override @Override
public Node visit(ForeachMapStatement s, Map<String, VariableInfo> t) { public Node visit(ForeachMapStatement s, Map<String, VariableInfo> t) {
t.put(s.key, variableInfo(t, s.key)); grabVariableInfo(t, s.key);
t.put(s.value, variableInfo(t, s.value)); grabVariableInfo(t, s.value);
return super.visit(s, t); return super.visit(s, t);
} }
@ -72,7 +71,7 @@ public class VariablesGrabber extends OptimizationVisitor<Map<String, VariableIn
for (MatchExpression.Pattern pattern : s.patterns) { for (MatchExpression.Pattern pattern : s.patterns) {
if (pattern instanceof MatchExpression.VariablePattern varPattern) { if (pattern instanceof MatchExpression.VariablePattern varPattern) {
final String variableName = varPattern.variable; final String variableName = varPattern.variable;
t.put(variableName, variableInfo(t, variableName)); grabVariableInfo(t, variableName);
} }
} }
return super.visit(s, t); return super.visit(s, t);
@ -82,13 +81,12 @@ public class VariablesGrabber extends OptimizationVisitor<Map<String, VariableIn
public Node visit(UnaryExpression s, Map<String, VariableInfo> t) { public Node visit(UnaryExpression s, Map<String, VariableInfo> t) {
if (s.expr1 instanceof Accessible) { if (s.expr1 instanceof Accessible) {
if (s.expr1 instanceof VariableExpression varExpr) { if (s.expr1 instanceof VariableExpression varExpr) {
final String variableName = varExpr.name; grabVariableInfo(t, varExpr.name);
t.put(variableName, variableInfo(t, variableName));
} }
if (s.expr1 instanceof ContainerAccessExpression conExpr) { if (s.expr1 instanceof ContainerAccessExpression conExpr) {
if (conExpr.rootIsVariable()) { if (conExpr.rootIsVariable()) {
final String variableName = ((VariableExpression) conExpr.root).name; final String variableName = ((VariableExpression) conExpr.root).name;
t.put(variableName, variableInfo(t, variableName)); grabVariableInfo(t, variableName);
} }
} }
} }
@ -99,9 +97,8 @@ public class VariablesGrabber extends OptimizationVisitor<Map<String, VariableIn
public Node visit(UseStatement s, Map<String, VariableInfo> t) { public Node visit(UseStatement s, Map<String, VariableInfo> t) {
if (grabModuleConstants) { if (grabModuleConstants) {
for (Map.Entry<String, Value> entry : s.loadConstants().entrySet()) { for (Map.Entry<String, Value> entry : s.loadConstants().entrySet()) {
final VariableInfo var = variableInfo(t, entry.getKey()); final VariableInfo var = grabVariableInfo(t, entry.getKey());
var.value = entry.getValue(); var.value = entry.getValue();
t.put(entry.getKey(), var);
} }
} }
return super.visit(s, t); return super.visit(s, t);
@ -111,20 +108,19 @@ public class VariablesGrabber extends OptimizationVisitor<Map<String, VariableIn
protected boolean visit(Arguments in, Arguments out, Map<String, VariableInfo> t) { protected boolean visit(Arguments in, Arguments out, Map<String, VariableInfo> t) {
for (Argument argument : in) { for (Argument argument : in) {
final String variableName = argument.name(); final String variableName = argument.name();
final VariableInfo var = variableInfo(t, variableName); grabVariableInfo(t, variableName);
/* No need to add value - it is optional arguments /* No need to add value - it is optional arguments
final Expression expr = argument.getValueExpr(); final Expression expr = argument.getValueExpr();
if (expr != null && isValue(expr)) { if (expr != null && isValue(expr)) {
var.value = ((ValueExpression) expr).value; var.value = ((ValueExpression) expr).value;
}*/ }*/
t.put(variableName, var);
} }
return super.visit(in, out, t); return super.visit(in, out, t);
} }
private VariableInfo variableInfo(Map<String, VariableInfo> t, final String variableName) { private VariableInfo grabVariableInfo(Map<String, VariableInfo> t, final String variableName) {
final VariableInfo var; final VariableInfo var;
if (t.containsKey(variableName)) { if (t.containsKey(variableName)) {
var = t.get(variableName); var = t.get(variableName);
@ -132,6 +128,7 @@ public class VariablesGrabber extends OptimizationVisitor<Map<String, VariableIn
} else { } else {
var = new VariableInfo(); var = new VariableInfo();
var.modifications = 1; var.modifications = 1;
t.put(variableName, var);
} }
return var; return var;
} }