aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/runtime/Function.java
diff options
context:
space:
mode:
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;
+ }
+
+}