aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'main/core/runtime')
-rw-r--r--main/core/runtime/Function.java10
-rw-r--r--main/core/runtime/State.java10
-rw-r--r--main/core/runtime/builtins/BuiltinManager.java27
-rw-r--r--main/core/runtime/builtins/OutBuiltinFunction.java32
4 files changed, 78 insertions, 1 deletions
diff --git a/main/core/runtime/Function.java b/main/core/runtime/Function.java
index cc4f56f..6989a68 100644
--- a/main/core/runtime/Function.java
+++ b/main/core/runtime/Function.java
@@ -15,6 +15,16 @@ public class Function {
private BlockBodyNode body;
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ private String name;
+
public Function(List<String> argumentNames, BlockBodyNode body) {
this.argumentNames = argumentNames;
this.body = body;
diff --git a/main/core/runtime/State.java b/main/core/runtime/State.java
index d825a3a..8563a77 100644
--- a/main/core/runtime/State.java
+++ b/main/core/runtime/State.java
@@ -1,6 +1,7 @@
package com.jantuomi.interpreter.main.core.runtime;
import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.runtime.builtins.BuiltinManager;
import com.jantuomi.interpreter.main.exception.InterpreterException;
import java.util.Arrays;
@@ -21,7 +22,14 @@ public class State {
private State() {
/* Push global scope onto the stack */
- scopes.push(new Scope());
+ Scope globalScope = new Scope();
+
+ for (Function builtin : BuiltinManager.getInstance().getBuiltins()) {
+ globalScope.addFunction(builtin.getName(), builtin);
+ }
+
+ scopes.push(globalScope);
+
}
private DataContainer resolveSymbol(String symbol) throws InterpreterException {
diff --git a/main/core/runtime/builtins/BuiltinManager.java b/main/core/runtime/builtins/BuiltinManager.java
new file mode 100644
index 0000000..21027a6
--- /dev/null
+++ b/main/core/runtime/builtins/BuiltinManager.java
@@ -0,0 +1,27 @@
+package com.jantuomi.interpreter.main.core.runtime.builtins;
+
+import com.jantuomi.interpreter.main.core.runtime.Function;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by jan on 21.6.2016.
+ */
+public class BuiltinManager {
+ private static BuiltinManager instance = new BuiltinManager();
+
+ public static BuiltinManager getInstance() {
+ return instance;
+ }
+
+ private List<Function> builtins = new ArrayList<>();
+
+ private BuiltinManager() {
+ builtins.add(new OutBuiltinFunction());
+ }
+
+ public List<Function> getBuiltins() {
+ return builtins;
+ }
+}
diff --git a/main/core/runtime/builtins/OutBuiltinFunction.java b/main/core/runtime/builtins/OutBuiltinFunction.java
new file mode 100644
index 0000000..0611a83
--- /dev/null
+++ b/main/core/runtime/builtins/OutBuiltinFunction.java
@@ -0,0 +1,32 @@
+package com.jantuomi.interpreter.main.core.runtime.builtins;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.runtime.Function;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 21.6.2016.
+ */
+public class OutBuiltinFunction extends Function {
+ public OutBuiltinFunction() {
+ super(
+ Arrays.asList("expression"),
+ null
+ );
+ }
+
+ @Override
+ public String getName() {
+ return "out";
+ }
+
+ @Override
+ public DataContainer evaluate(List<DataContainer> params) throws InterpreterException {
+ DataContainer param = params.get(0);
+ System.out.println(param.getData().toString());
+ return param;
+ }
+}