diff options
| author | GeonoTRON2000 <geono@thegt.org> | 2014-05-02 21:00:45 -0700 |
|---|---|---|
| committer | GeonoTRON2000 <geono@thegt.org> | 2014-05-02 21:00:45 -0700 |
| commit | 196117c0da164c226e111cc72a6cc169634f91c5 (patch) | |
| tree | 11ebfc6e941d2f8a0f2001377f9710552a9558b6 /Shenanigans/src/org/archphantom/shenanigans/elements | |
| parent | 508b66baa22aa54b940606663dd569eee03397ee (diff) | |
| download | shenanigans-196117c0da164c226e111cc72a6cc169634f91c5.tar.gz | |
Fixed variable and array storage glitch, cleaned up array printing.
Diffstat (limited to 'Shenanigans/src/org/archphantom/shenanigans/elements')
7 files changed, 58 insertions, 33 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; } } diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java index c03b66f..242e81a 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java @@ -1,36 +1,47 @@ package org.archphantom.shenanigans.elements.values; import java.util.ArrayList; import org.archphantom.shenanigans.elements.Program; -import org.archphantom.shenanigans.elements.expressions.Expression; import org.archphantom.shenanigans.elements.variables.VarTable; public class Array extends Value { - private ArrayList<Expression> vals; + private ArrayList<Value> vals; - public Array (ArrayList<Expression> values) { + public Array () { + this.vals = new ArrayList<Value>(); + } + + public Array (ArrayList<Value> values) { this.vals = values; } public Array (String string) { - this.vals = new ArrayList<Expression>(string.length()); + this.vals = new ArrayList<Value>(string.length()); for (int i = 0; i < string.length(); i++) { this.vals.add(new CharValue(string.charAt(i))); } } - public Expression getElement (IntValue index, VarTable vars, Program program) { + public Value getElement (IntValue index, VarTable vars, Program program) { return vals.get(index.intValue(vars, program).intValue()); } - public Expression setElement (IntValue index, Expression value, VarTable vars, Program program) { - return vals.set(index.intValue(vars, program).intValue(), value); + public Value setElement (IntValue index, Value value, VarTable vars, Program program) { + int iindex = index.intValue(vars, program).intValue(); + int size = vals.size(); + if (iindex >= size) { + for (int i = size; i <= iindex; i++) { + vals.add(null); + } + } + vals.set(index.intValue(vars, program).intValue(), value); + return value; } public int size () { return vals.size(); } - public ArrayList<Expression> getValue(VarTable vars, Program program) { + public ArrayList<Value> getValue(VarTable vars, Program program) { return vals; } diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java index 5b33bf2..81bfd27 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java @@ -18,7 +18,7 @@ public class Namespace extends Value { return name; } - public Expression getVar (String identifier, VarTable vars, Program program) { + public Value getVar (String identifier, VarTable vars, Program program) { if (identifier.contains(".")) { String nspacecall = identifier.substring(0, identifier.indexOf('.')); String varname = identifier.substring(identifier.indexOf('.')+1); diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java b/Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java index 0811c56..5328846 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java @@ -1,20 +1,20 @@ package org.archphantom.shenanigans.elements.variables; import java.util.Hashtable; -import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.Value; public class VarTable { - private Hashtable<String, Expression> vars; + private Hashtable<String, Value> vars; public VarTable () { - vars = new Hashtable<String, Expression>(); + vars = new Hashtable<String, Value>(); } - public Expression set (String identifier, Expression value) { + public Value set (String identifier, Value value) { vars.put(identifier, value); return value; } - public Expression get (String identifier) { + public Value get (String identifier) { return vars.get(identifier); } |
