diff options
Diffstat (limited to 'Shenanigans/src/org/archphantom/shenanigans/elements/expressions')
4 files changed, 33 insertions, 19 deletions
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java index c857c29..4251286 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java @@ -17,12 +17,17 @@ public class Variable extends Expression { String varname = identifier.substring(identifier.indexOf('.')+1); Namespace ns; if ((ns = program.getNamespace(nspacecall)) != null) { - return ns.getVar(varname, vars, program).evaluate(vars, program); + return ns.getVar(varname, vars, program); } else { - return null; + throw new RuntimeException("No such variable: "+identifier); } } else { - return vars.get(identifier).evaluate(vars, program); + Value val; + if ((val = vars.get(identifier)) != null) { + return val; + } else { + throw new RuntimeException("No such variable: "+identifier); + } } } diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java index c10c159..005685b 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java @@ -28,7 +28,7 @@ public class ArrayAssignment extends Expression { Value varr = new Variable(identifier).evaluate(vars, program); if (varr instanceof Array) { Array array = (Array) varr; - return array.setElement(iindex, value, vars, program).evaluate(vars, program); + return array.setElement(iindex, value.evaluate(vars, program), vars, program); } else { throw new RuntimeException("Not Implemented"); } diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java index b637383..65c7438 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java @@ -26,7 +26,7 @@ public class ArrayVariable extends Expression { Value varr = new Variable(identifier).evaluate(vars, program); if (varr instanceof Array) { Array array = (Array) varr; - return array.getElement(iindex, vars, program).evaluate(vars, program); + return array.getElement(iindex, vars, program); } else { throw new RuntimeException("Not Implemented"); } diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java index 33f0dba..a4c02ed 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java @@ -1,31 +1,40 @@ package org.archphantom.shenanigans.elements.expressions.statements; import java.math.BigInteger; -import java.util.ArrayList; - import org.archphantom.shenanigans.elements.Program; import org.archphantom.shenanigans.elements.expressions.Expression; import org.archphantom.shenanigans.elements.values.Array; import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Print extends Expression { - private Array data; + private Expression data; public Print (Expression data) { - ArrayList<Expression> list = new ArrayList<Expression>(1); - list.add(data); - this.data = new Array(list); - } - - public Print (Array data) { this.data = data; } - - public Array evaluate(VarTable vars, Program program) { - for (int i = 0; i < data.size(); i++) { - System.out.print(data.getElement(new IntValue(BigInteger.valueOf(i)), vars, program).evaluate(vars, program).getValue(vars, program).toString()); + + public Value evaluate(VarTable vars, Program program) { + Value vdata = data.evaluate(vars, program); + if (vdata instanceof Array) { + System.out.print('['); + Array arr = (Array) vdata; + for (int i = 0; i < arr.size(); i++) { + Value val = arr.getElement(new IntValue(BigInteger.valueOf(i)), vars, program).evaluate(vars, program); + if (val instanceof Array) { + new Print ((Array) val).evaluate(vars, program); + } else { + System.out.print(val.getValue(vars, program).toString()); + } + if (i < arr.size()-1) { + System.out.print(", "); + } + } + System.out.print(']'); + } else { + System.out.print(vdata.getValue(vars, program).toString()); } - return data; + return vdata; } } |
