mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Simplify variables grabber
This commit is contained in:
parent
8a4dcde2a1
commit
3e661c81c4
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user