diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2016-06-21 20:07:32 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2016-07-26 19:47:03 +0300 |
| commit | 45a2b88d584fc8bdee1fbaf0def1d9b55ba26eff (patch) | |
| tree | 1cf80f1b4384e27054c3cb2f90ac6f1953e89f35 /main/core/runtime/Function.java | |
| parent | d745f000d6d60b9cdf0ba40dbf80660c1aa6bc61 (diff) | |
Added scopes, variables and functions
Diffstat (limited to 'main/core/runtime/Function.java')
| -rw-r--r-- | main/core/runtime/Function.java | 41 |
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; + } + +} |
