aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/runtime/Function.java
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-21 20:07:32 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:47:03 +0300
commit45a2b88d584fc8bdee1fbaf0def1d9b55ba26eff (patch)
tree1cf80f1b4384e27054c3cb2f90ac6f1953e89f35 /main/core/runtime/Function.java
parentd745f000d6d60b9cdf0ba40dbf80660c1aa6bc61 (diff)
Added scopes, variables and functions
Diffstat (limited to 'main/core/runtime/Function.java')
-rw-r--r--main/core/runtime/Function.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/main/core/runtime/Function.java b/main/core/runtime/Function.java
new file mode 100644
index 0000000..cf6422f
--- /dev/null
+++ b/main/core/runtime/Function.java
@@ -0,0 +1,41 @@
+package com.jantuomi.interpreter.main.core.runtime;
+
+import com.jantuomi.interpreter.main.core.parser.ast.FunctionBodyNode;
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+
+import java.util.List;
+
+/**
+ * Created by jan on 20.6.2016.
+ */
+public class Function {
+
+ private List<String> argumentNames;
+
+ private FunctionBodyNode body;
+
+ public Function(List<String> argumentNames, FunctionBodyNode body) {
+ this.argumentNames = argumentNames;
+ this.body = body;
+ }
+
+ public DataContainer evaluate(List<DataContainer> params) {
+ State.getInstance().createScope();
+
+ if (params.size() != argumentNames.size()) {
+ return null;
+ }
+
+ for (int i = 0; i < argumentNames.size(); i++) {
+ State.getInstance().addSymbolToScope(argumentNames.get(i));
+ State.getInstance().setSymbolValueToScope(argumentNames.get(i), params.get(i));
+ }
+
+ DataContainer returnValue = body.evaluate();
+
+ State.getInstance().popScope();
+
+ return returnValue;
+ }
+
+}