From 196117c0da164c226e111cc72a6cc169634f91c5 Mon Sep 17 00:00:00 2001 From: GeonoTRON2000 Date: Fri, 2 May 2014 21:00:45 -0700 Subject: Fixed variable and array storage glitch, cleaned up array printing. --- .../shenanigans/elements/expressions/Variable.java | 11 +++++-- .../expressions/statements/ArrayAssignment.java | 2 +- .../expressions/statements/ArrayVariable.java | 2 +- .../elements/expressions/statements/Print.java | 37 ++++++++++++++-------- 4 files changed, 33 insertions(+), 19 deletions(-) (limited to 'Shenanigans/src/org/archphantom/shenanigans/elements/expressions') 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 list = new ArrayList(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; } } -- cgit v1.2.3