summaryrefslogtreecommitdiff
path: root/Shenanigans/src/org/archphantom/shenanigans/elements/values
diff options
context:
space:
mode:
authorGeonoTRON2000 <geono@thegt.org>2014-04-29 07:13:20 -0700
committerGeonoTRON2000 <geono@thegt.org>2014-04-29 07:13:20 -0700
commiteb05c2dd956b7e991f52eb5c7f03a0f11b7f1f33 (patch)
treeb3c7315063dae47af9ccf0efb40c4c2b1376e499 /Shenanigans/src/org/archphantom/shenanigans/elements/values
parentb115ae93a10962dd61c18d563be17ad9ef56d47a (diff)
downloadshenanigans-eb05c2dd956b7e991f52eb5c7f03a0f11b7f1f33.tar.gz
Pushed existing work
Diffstat (limited to 'Shenanigans/src/org/archphantom/shenanigans/elements/values')
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java37
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java16
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java15
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java26
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java25
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java26
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java66
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java13
8 files changed, 224 insertions, 0 deletions
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java
new file mode 100644
index 0000000..c03b66f
--- /dev/null
+++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java
@@ -0,0 +1,37 @@
+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;
+
+ public Array (ArrayList<Expression> values) {
+ this.vals = values;
+ }
+
+ public Array (String string) {
+ this.vals = new ArrayList<Expression>(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) {
+ 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 int size () {
+ return vals.size();
+ }
+
+ public ArrayList<Expression> getValue(VarTable vars, Program program) {
+ return vals;
+ }
+
+}
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java
new file mode 100644
index 0000000..23b968a
--- /dev/null
+++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java
@@ -0,0 +1,16 @@
+package org.archphantom.shenanigans.elements.values;
+import org.archphantom.shenanigans.elements.Program;
+import org.archphantom.shenanigans.elements.variables.VarTable;
+
+public class BoolValue extends Value {
+ private boolean val;
+
+ public BoolValue (boolean val) {
+ this.val = val;
+ }
+
+ public Boolean getValue (VarTable vars, Program program) {
+ return val;
+ }
+
+}
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java
new file mode 100644
index 0000000..fbae3c5
--- /dev/null
+++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java
@@ -0,0 +1,15 @@
+package org.archphantom.shenanigans.elements.values;
+import org.archphantom.shenanigans.elements.Program;
+import org.archphantom.shenanigans.elements.variables.VarTable;
+
+public class CharValue extends Value {
+ private char val;
+
+ public CharValue (char val) {
+ this.val = val;
+ }
+
+ public Character getValue (VarTable vars, Program program) {
+ return val;
+ }
+}
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java
new file mode 100644
index 0000000..a2a2a58
--- /dev/null
+++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java
@@ -0,0 +1,26 @@
+package org.archphantom.shenanigans.elements.values;
+import java.math.BigDecimal;
+
+import org.archphantom.shenanigans.elements.Program;
+import org.archphantom.shenanigans.elements.variables.VarTable;
+
+public class DecimalValue extends Value {
+ private BigDecimal val;
+
+ public DecimalValue (double val) {
+ this.val = new BigDecimal(val);
+ }
+
+ public DecimalValue (String val) {
+ this.val = new BigDecimal(val);
+ }
+
+ public DecimalValue (BigDecimal val) {
+ this.val = val;
+ }
+
+ public BigDecimal getValue (VarTable vars, Program program) {
+ return val;
+ }
+
+}
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java
new file mode 100644
index 0000000..2ceb15e
--- /dev/null
+++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java
@@ -0,0 +1,25 @@
+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 Function extends Value {
+ private ArrayList<String> arguments;
+ private Expression body;
+
+ public Function (ArrayList<String> arguments, Expression body) {
+ this.arguments = arguments;
+ this.body = body;
+ }
+
+ public ArrayList<String> getArgNames () {
+ return arguments;
+ }
+
+ public Value getValue (VarTable vars, Program program) {
+ return body.evaluate(vars, program);
+ }
+
+}
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java
new file mode 100644
index 0000000..a1969fe
--- /dev/null
+++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java
@@ -0,0 +1,26 @@
+package org.archphantom.shenanigans.elements.values;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.archphantom.shenanigans.elements.Program;
+import org.archphantom.shenanigans.elements.variables.VarTable;
+
+public class IntValue extends DecimalValue {
+
+ public IntValue (int val) {
+ super(new BigDecimal(val));
+ }
+
+ public IntValue (String val) {
+ super(new BigDecimal(val));
+ }
+
+ public IntValue(BigInteger val) {
+ super(new BigDecimal(val));
+ }
+
+ public BigInteger intValue (VarTable vars, Program program) {
+ return super.getValue(vars, program).toBigInteger();
+ }
+
+}
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java
new file mode 100644
index 0000000..5b33bf2
--- /dev/null
+++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java
@@ -0,0 +1,66 @@
+package org.archphantom.shenanigans.elements.values;
+import org.archphantom.shenanigans.elements.Program;
+import org.archphantom.shenanigans.elements.expressions.Expression;
+import org.archphantom.shenanigans.elements.variables.VarTable;
+
+public class Namespace extends Value {
+ private String name;
+ private Expression body;
+ private VarTable myvars;
+
+ public Namespace (String name, Expression body, VarTable myvars) {
+ this.name = name;
+ this.body = body;
+ this.myvars = myvars;
+ }
+
+ public String getName () {
+ return name;
+ }
+
+ public Expression getVar (String identifier, VarTable vars, Program program) {
+ if (identifier.contains(".")) {
+ String nspacecall = identifier.substring(0, identifier.indexOf('.'));
+ String varname = identifier.substring(identifier.indexOf('.')+1);
+ Value vns;
+ if ((vns = myvars.get(nspacecall).evaluate(vars, program)) != null) {
+ if (vns instanceof Namespace) {
+ Namespace ns = (Namespace) vns;
+ return ns.getVar(varname, vars, program);
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ } else {
+ return myvars.get(identifier);
+ }
+ }
+
+ public Value setVar (String identifier, Expression value, VarTable vars, Program program) {
+ if (identifier.contains(".")) {
+ String nspacecall = identifier.substring(0, identifier.indexOf('.'));
+ String varname = identifier.substring(identifier.indexOf('.')+1);
+ Value vns;
+ if ((vns = myvars.get(nspacecall).evaluate(vars, program)) != null) {
+ if (vns instanceof Namespace) {
+ Namespace ns = (Namespace) vns;
+ return ns.setVar(varname, value, vars, program);
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ } else {
+ return vars.get(identifier).evaluate(vars, program);
+ }
+ }
+
+ public Value getValue (VarTable vars, Program program) {
+ System.out.println("Running namespace's body...");
+ return body.evaluate(myvars, program);
+ }
+
+}
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java
new file mode 100644
index 0000000..d329c2c
--- /dev/null
+++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java
@@ -0,0 +1,13 @@
+package org.archphantom.shenanigans.elements.values;
+import org.archphantom.shenanigans.elements.Program;
+import org.archphantom.shenanigans.elements.expressions.Expression;
+import org.archphantom.shenanigans.elements.variables.VarTable;
+
+public abstract class Value extends Expression {
+ public abstract Object getValue(VarTable vars, Program program);
+
+ public Value evaluate (VarTable vars, Program program) {
+ return this;
+ }
+
+}