summaryrefslogtreecommitdiff
path: root/Shenanigans/src/org/archphantom/shenanigans/elements
diff options
context:
space:
mode:
authorGeonoTRON2000 <geono@thegt.org>2014-05-02 21:00:45 -0700
committerGeonoTRON2000 <geono@thegt.org>2014-05-02 21:00:45 -0700
commit196117c0da164c226e111cc72a6cc169634f91c5 (patch)
tree11ebfc6e941d2f8a0f2001377f9710552a9558b6 /Shenanigans/src/org/archphantom/shenanigans/elements
parent508b66baa22aa54b940606663dd569eee03397ee (diff)
downloadshenanigans-196117c0da164c226e111cc72a6cc169634f91c5.tar.gz
Fixed variable and array storage glitch, cleaned up array printing.
Diffstat (limited to 'Shenanigans/src/org/archphantom/shenanigans/elements')
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java11
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java2
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java2
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java37
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java27
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java2
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java10
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);
}