diff options
Diffstat (limited to 'main/core/runtime')
| -rw-r--r-- | main/core/runtime/Function.java | 10 | ||||
| -rw-r--r-- | main/core/runtime/State.java | 10 | ||||
| -rw-r--r-- | main/core/runtime/builtins/BuiltinManager.java | 27 | ||||
| -rw-r--r-- | main/core/runtime/builtins/OutBuiltinFunction.java | 32 |
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; + } +} |
