aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorjantuomi <jans.tuomi@gmail.com>2016-08-04 15:18:57 +0300
committerjantuomi <jans.tuomi@gmail.com>2016-08-04 15:18:57 +0300
commitbe4953049321731f865e94def771ed53fe6b061f (patch)
tree05a4a8c7fca87a6240b25a16e4cc99dd7db56a3b /src
parentefc2af17c87104ad35e32c50d26a8678b519a1bf (diff)
Store functions as symbols in the scope
Functions no longer know their own name because they are essentially lambdas assigned to variables
Diffstat (limited to 'src')
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java10
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java8
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java2
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/datatype/ObjectDatatype.java1
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/Function.java17
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/Scope.java36
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/State.java19
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java37
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java11
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java7
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java11
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java9
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java21
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java11
-rw-r--r--src/main/com/jantuomi/tunkki/exception/types/FunctionArgumentTunkkiError.java2
23 files changed, 64 insertions, 178 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java
index 5c3ad94..19de2f2 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java
@@ -16,16 +16,10 @@ import java.util.List;
*/
public class FunctionDefineNode extends VarargOperatorNode {
- private String name;
-
public void setBody(ASTNode body) {
this.body = body;
}
- public void setName(String name) {
- this.name = name;
- }
-
private ASTNode body;
public FunctionDefineNode(Token token) {
@@ -45,8 +39,6 @@ public class FunctionDefineNode extends VarargOperatorNode {
throw new ExpectedDifferentTokenTunkkiError(getLine(), getText());
}
Function function = new Function(argumentNames, (BlockBodyNode) body);
- function.setName(name);
- State.getInstance().addFunctionToScope(name, function);
CallableDatatype c = new CallableDatatype();
c.setData(function);
@@ -60,7 +52,7 @@ public class FunctionDefineNode extends VarargOperatorNode {
System.out.print("\t");
}
- System.out.println(String.format("Function %s", name));
+ System.out.println(String.format("Function"));
for (int i = 0; i < indent + 1; i++) {
System.out.print("\t");
diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java
index ff4c256..6eccabf 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java
@@ -45,12 +45,8 @@ public class SymbolNode extends ASTNode {
Datatype returnValue;
try {
- if (State.getInstance().isFunction(name)) {
- returnValue = State.getInstance().makeFunctionReference(name);
- } else {
- List<Datatype> paramValues = evaluateParameters();
- returnValue = State.getInstance().evaluateSymbol(name, paramValues);
- }
+ List<Datatype> paramValues = evaluateParameters();
+ returnValue = State.getInstance().evaluateSymbol(name, paramValues);
}
/* If a TunkkiError is caught, pass it on with line information */
diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java
index f4f2844..f05ee72 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java
@@ -17,7 +17,7 @@ public class CallableDatatype extends Datatype<Function> {
@Override
public String toString() {
- return String.format("Callable %s", getData().getName());
+ return "Callable";
}
public Datatype call(List<Datatype> params) throws TunkkiError {
diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/ObjectDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/ObjectDatatype.java
index 39f1d3d..b9dfb07 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/datatype/ObjectDatatype.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/ObjectDatatype.java
@@ -20,7 +20,6 @@ public class ObjectDatatype extends Datatype<Scope> {
public String toString() {
String sb = "Object [";
sb += String.join(", ", getData().getVariableNames());
- sb += String.join(", ", getData().getFunctionNames());
sb += "]";
return sb;
}
diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java
index 8050692..34a73f6 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java
@@ -24,11 +24,8 @@ public class FunctionDefineToken extends VarargOperatorToken {
if (args.size() == 0) {
throw new ExpectedDifferentTokenTunkkiError(getLine(), getText());
}
-
- node.setName(args.get(0).getText());
-
List<ASTNode> funcArgs = new ArrayList<>();
- for (int i = 1; i < args.size() - 1; i++) {
+ for (int i = 0; i < args.size() - 1; i++) {
funcArgs.add(args.get(i).generateNode());
}
node.setArgs(funcArgs);
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/Function.java b/src/main/com/jantuomi/tunkki/core/runtime/Function.java
index 4b08a80..e4c4f0f 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/Function.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/Function.java
@@ -1,6 +1,7 @@
package com.jantuomi.tunkki.core.runtime;
import com.jantuomi.tunkki.core.parser.ast.BlockBodyNode;
+import com.jantuomi.tunkki.core.parser.datatype.CallableDatatype;
import com.jantuomi.tunkki.core.parser.datatype.Datatype;
import com.jantuomi.tunkki.exception.types.TunkkiError;
@@ -14,16 +15,6 @@ public class Function {
private List<String> argumentNames;
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;
@@ -48,4 +39,10 @@ public class Function {
return returnValue;
}
+ public CallableDatatype makeCallable() {
+ CallableDatatype c = new CallableDatatype();
+ c.setData(this);
+ return c;
+ }
+
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/Scope.java b/src/main/com/jantuomi/tunkki/core/runtime/Scope.java
index 712c97a..7238505 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/Scope.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/Scope.java
@@ -17,16 +17,11 @@ public class Scope {
private Scope parent = null;
private Map<String, Datatype> variables = new HashMap<>();
- private Map<String, Function> functions = new HashMap<>();
public Set<String> getVariableNames() {
return variables.keySet();
}
- public Set<String> getFunctionNames() {
- return functions.keySet();
- }
-
public void addVariable(String symbol) {
variables.put(symbol, null);
}
@@ -35,10 +30,12 @@ public class Scope {
variables.replace(symbol, value);
}
+ public void addAndSetVariable(String symbol, Datatype value) {
+ addVariable(symbol);
+ setVariableValue(symbol, value);
+ }
+
public Datatype resolveSymbol(String symbol, List<Datatype> params) throws TunkkiError {
- if (functions.containsKey(symbol)) {
- return functions.get(symbol).evaluate(params);
- }
if (variables.containsKey(symbol)) {
return variables.get(symbol);
}
@@ -50,30 +47,7 @@ public class Scope {
}
}
- public CallableDatatype getCallable(String symbol) {
- if (functions.containsKey(symbol)) {
- Function f = functions.get(symbol);
- CallableDatatype c = new CallableDatatype();
- c.setData(f);
- return c;
- }
- else if (parent != null) {
- return parent.getCallable(symbol);
- }
- else {
- return null;
- }
- }
-
public void setParent(Scope parent) {
this.parent = parent;
}
-
- public void addFunction(String symbol, Function func) {
- functions.put(symbol, func);
- }
-
- public boolean isFunction(String symbol) {
- return functions.containsKey(symbol);
- }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/State.java b/src/main/com/jantuomi/tunkki/core/runtime/State.java
index 968f8c9..e5f53b4 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/State.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/State.java
@@ -1,5 +1,6 @@
package com.jantuomi.tunkki.core.runtime;
+import com.jantuomi.tunkki.core.parser.datatype.CallableDatatype;
import com.jantuomi.tunkki.core.parser.datatype.Datatype;
import com.jantuomi.tunkki.core.parser.datatype.NadaDatatype;
import com.jantuomi.tunkki.core.runtime.builtins.BuiltinManager;
@@ -7,6 +8,7 @@ import com.jantuomi.tunkki.exception.types.TunkkiError;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.Stack;
/**
@@ -25,8 +27,10 @@ public class State {
/* Push global scope onto the stack */
Scope globalScope = new Scope();
- for (Function builtin : BuiltinManager.getInstance().getBuiltins()) {
- globalScope.addFunction(builtin.getName(), builtin);
+ Map<String, CallableDatatype> builtins = BuiltinManager.getInstance().getBuiltins();
+ for (String builtin : builtins.keySet()) {
+ globalScope.addVariable(builtin);
+ globalScope.setVariableValue(builtin, builtins.get(builtin));
}
/* Add nada to the scope */
@@ -49,10 +53,6 @@ public class State {
return scopes.peek().resolveSymbol(symbol, parameters);
}
- public boolean isFunction(String symbol) {
- return scopes.peek().isFunction(symbol);
- }
-
public Scope createScope() {
Scope scope = new Scope();
if (scopes.size() > 0) {
@@ -68,9 +68,6 @@ public class State {
scopes.peek().addVariable(symbol);
}
- public void addFunctionToScope(String symbol, Function func) {
- scopes.peek().addFunction(symbol, func);
- }
public void setSymbolValueToScope(String symbol, Datatype value) {
scopes.peek().setVariableValue(symbol, value);
@@ -79,8 +76,4 @@ public class State {
public Scope popScope() {
return scopes.pop();
}
-
- public Datatype makeFunctionReference(String name) {
- return scopes.peek().getCallable(name);
- }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
index 0b98830..ae66a14 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
@@ -1,5 +1,6 @@
package com.jantuomi.tunkki.core.runtime.builtins;
+import com.jantuomi.tunkki.core.parser.datatype.CallableDatatype;
import com.jantuomi.tunkki.core.runtime.Function;
import com.jantuomi.tunkki.core.runtime.builtins.globals.*;
import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsBooleanBuiltinFunction;
@@ -20,37 +21,37 @@ public class BuiltinManager {
return instance;
}
- private List<BuiltinFunction> builtins;
+ private Map<String, CallableDatatype> builtins = new HashMap<>();
public final Set<String> BUILTIN_MODULES = new HashSet<>(Arrays.asList(
"math"
));
private BuiltinManager() {
- instance = this;
- builtins = new ArrayList<>();
initializeGlobals();
}
private void initializeGlobals() {
- builtins.add(new OutputBuiltinFunction());
- builtins.add(new InputBuiltinFunction());
- builtins.add(new ConcatBuiltinFunction());
- builtins.add(new AsIntBuiltinFunction());
- builtins.add(new AsBooleanBuiltinFunction());
- builtins.add(new IncludeBuiltinFunction());
- builtins.add(new ListBuiltinFunction());
- builtins.add(new ContainsBuiltinFunction());
- builtins.add(new GetBuiltinFunction());
- builtins.add(new EqualsBuiltinFunction());
- builtins.add(new IfBuiltinFunction());
+ builtins.put("output", new OutputBuiltinFunction().makeCallable());
+ builtins.put("input", new InputBuiltinFunction().makeCallable());
+ builtins.put("concat", new ConcatBuiltinFunction().makeCallable());
+ builtins.put("as_int", new AsIntBuiltinFunction().makeCallable());
+ builtins.put("as_bool", new AsBooleanBuiltinFunction().makeCallable());
+ builtins.put("include", new IncludeBuiltinFunction().makeCallable());
+ builtins.put("list", new ListBuiltinFunction().makeCallable());
+ builtins.put("contains", new ContainsBuiltinFunction().makeCallable());
+ builtins.put("get", new GetBuiltinFunction().makeCallable());
+ builtins.put("eq", new EqualsBuiltinFunction().makeCallable());
+ builtins.put("if", new IfBuiltinFunction().makeCallable());
}
- private List<Function> getFunctionsFromMathModule() {
- return Collections.singletonList(new PowerBuiltinFunction());
+ private Map<String, CallableDatatype> getFunctionsFromMathModule() {
+ Map<String, CallableDatatype> map = new HashMap<>();
+ map.put("math", new PowerBuiltinFunction().makeCallable());
+ return map;
}
- public List<Function> getFunctionsFromModule(String name) throws TunkkiError {
+ public Map<String, CallableDatatype> getFunctionsFromModule(String name) throws TunkkiError {
if (name.equals("math")) {
return getFunctionsFromMathModule();
}
@@ -59,7 +60,7 @@ public class BuiltinManager {
}
}
- public List<BuiltinFunction> getBuiltins() {
+ public Map<String, CallableDatatype> getBuiltins() {
return builtins;
}
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java
index 8cb8c41..b175525 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java
@@ -9,14 +9,11 @@ import java.util.List;
/**
* Created by jan on 28.6.2016.
*/
-abstract public class BuiltinFunction extends Function{
+abstract public class BuiltinFunction extends Function {
public BuiltinFunction(List<String> argumentNames) {
super(argumentNames, null);
}
@Override
abstract public Datatype evaluate(List<Datatype> params) throws TunkkiError;
-
- @Override
- abstract public String getName();
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java
index 677ed32..170efed 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java
@@ -18,11 +18,6 @@ public class ConcatBuiltinFunction extends BuiltinFunction {
}
@Override
- public String getName() {
- return "concat";
- }
-
- @Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
StringBuilder sb = new StringBuilder();
for (Datatype d : params) {
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java
index c6eb589..ccb461a 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java
@@ -21,7 +21,7 @@ public class ContainsBuiltinFunction extends BuiltinFunction {
@Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() != 2) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
if (params.get(0).getType() == Datatype.Type.List) {
@@ -30,7 +30,7 @@ public class ContainsBuiltinFunction extends BuiltinFunction {
else if (params.get(0).getType() == Datatype.Type.String) {
return evaluateOnString(params);
}
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
private Datatype evaluateOnList(List<Datatype> params) throws TunkkiError {
@@ -47,7 +47,7 @@ public class ContainsBuiltinFunction extends BuiltinFunction {
private Datatype evaluateOnString(List<Datatype> params) throws TunkkiError {
if (params.get(1).getType() != Datatype.Type.String) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
StringDatatype string = (StringDatatype) params.get(0);
@@ -57,9 +57,4 @@ public class ContainsBuiltinFunction extends BuiltinFunction {
string.getData().contains(comp.getData())
);
}
-
- @Override
- public String getName() {
- return "contains";
- }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
index 1d5ca64..c31759a 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
@@ -20,7 +20,7 @@ public class EqualsBuiltinFunction extends BuiltinFunction {
@Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() != 2) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
Datatype lhs = params.get(0);
@@ -33,9 +33,4 @@ public class EqualsBuiltinFunction extends BuiltinFunction {
throw new TypeTunkkiError(-1, lhs.getType().toString(), rhs.getType().toString());
}
}
-
- @Override
- public String getName() {
- return "eq";
- }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
index 5298e60..f936854 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
@@ -21,15 +21,15 @@ public class GetBuiltinFunction extends BuiltinFunction {
@Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() != 2) {
- throw new FunctionArgumentTunkkiError(-1, getName(), params.toString());
+ throw new FunctionArgumentTunkkiError(-1, params.toString());
}
if (params.get(0).getType() != Datatype.Type.List) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
if (params.get(1).getType() != Datatype.Type.Integer) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
ListDatatype list = (ListDatatype) params.get(0);
@@ -42,9 +42,4 @@ public class GetBuiltinFunction extends BuiltinFunction {
throw new OutOfBoundsTunkkiError(-1, index.toString());
}
}
-
- @Override
- public String getName() {
- return "get";
- }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java
index b0eb491..f794aa2 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IfBuiltinFunction.java
@@ -22,13 +22,13 @@ public class IfBuiltinFunction extends BuiltinFunction {
@Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() != 2) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
Datatype lhs = params.get(0);
Datatype rhs = params.get(1);
if (lhs.getType() != Datatype.Type.Boolean || rhs.getType() != Datatype.Type.Callable) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
BooleanDatatype cond = (BooleanDatatype) lhs;
@@ -38,9 +38,4 @@ public class IfBuiltinFunction extends BuiltinFunction {
}
return new VoidDatatype();
}
-
- @Override
- public String getName() {
- return "if";
- }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
index ea4f7a6..fb2f9fc 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
@@ -3,10 +3,7 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals;
import com.jantuomi.tunkki.Tunkki;
import com.jantuomi.tunkki.core.CommandLineArgumentContainer;
-import com.jantuomi.tunkki.core.parser.datatype.Datatype;
-import com.jantuomi.tunkki.core.parser.datatype.ObjectDatatype;
-import com.jantuomi.tunkki.core.parser.datatype.StringDatatype;
-import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype;
+import com.jantuomi.tunkki.core.parser.datatype.*;
import com.jantuomi.tunkki.core.runtime.State;
import com.jantuomi.tunkki.core.runtime.builtins.BuiltinManager;
import com.jantuomi.tunkki.exception.ExceptionManager;
@@ -14,6 +11,7 @@ import com.jantuomi.tunkki.exception.types.*;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -29,11 +27,11 @@ public class IncludeBuiltinFunction extends BuiltinFunction {
@Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() != 1) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
if (params.get(0).getType() != Datatype.Type.String) {
- throw new TypeTunkkiError(-1, params.get(0).getType().toString(), getName());
+ throw new TypeTunkkiError(-1, params.get(0).getType().toString(), "include");
}
StringDatatype param = (StringDatatype) params.get(0);
@@ -42,8 +40,10 @@ public class IncludeBuiltinFunction extends BuiltinFunction {
if (BuiltinManager.getInstance().BUILTIN_MODULES.contains(filename)) {
ObjectDatatype namespace = new ObjectDatatype();
- BuiltinManager.getInstance().getFunctionsFromModule(filename)
- .forEach( f -> namespace.getData().addFunction(f.getName(), f) );
+ Map<String, CallableDatatype> funcs = BuiltinManager.getInstance().getFunctionsFromModule(filename);
+ for (String funcName : funcs.keySet()) {
+ namespace.getData().addAndSetVariable(funcName, funcs.get(funcName));
+ }
State.getInstance().addSymbolToScope(filename);
State.getInstance().setSymbolValueToScope(filename, namespace);
@@ -67,9 +67,4 @@ public class IncludeBuiltinFunction extends BuiltinFunction {
return new VoidDatatype();
}
-
- @Override
- public String getName() {
- return "include";
- }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java
index c5c8e56..4c52d46 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java
@@ -19,11 +19,6 @@ public class InputBuiltinFunction extends BuiltinFunction {
}
@Override
- public String getName() {
- return "input";
- }
-
- @Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() > 0) {
Datatype param = params.get(0);
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java
index 60d9b50..4d82c1a 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java
@@ -20,9 +20,4 @@ public class ListBuiltinFunction extends BuiltinFunction {
ListDatatype data = new ListDatatype(params);
return data;
}
-
- @Override
- public String getName() {
- return "list";
- }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java
index aa511ce..7a7d6fa 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java
@@ -18,11 +18,6 @@ public class OutputBuiltinFunction extends BuiltinFunction {
}
@Override
- public String getName() {
- return "output";
- }
-
- @Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
Datatype param = params.get(0);
System.out.println(param.getData().toString());
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java
index 632d25f..4432554 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java
@@ -19,11 +19,6 @@ public class AsBooleanBuiltinFunction extends BuiltinFunction {
}
@Override
- public String getName() {
- return "as_bool";
- }
-
- @Override
public BooleanDatatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() != 1) {
return null;
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java
index 4bd13a0..773d480 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java
@@ -19,11 +19,6 @@ public class AsIntBuiltinFunction extends BuiltinFunction {
}
@Override
- public String getName() {
- return "as_int";
- }
-
- @Override
public IntegerDatatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() != 1) {
return null;
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java
index ffd81f8..e56a9b9 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java
@@ -21,7 +21,7 @@ public class PowerBuiltinFunction extends BuiltinFunction {
@Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
if (params.size() != 2) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
Datatype lhs = params.get(0);
@@ -35,7 +35,7 @@ public class PowerBuiltinFunction extends BuiltinFunction {
return new DoubleDatatype(result);
}
catch (Exception ex) {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
}
@@ -47,13 +47,8 @@ public class PowerBuiltinFunction extends BuiltinFunction {
number = ((DoubleDatatype) dt).getData();
}
else {
- throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
+ throw new FunctionArgumentTunkkiError(-1, Datatype.toString(params));
}
return number;
}
-
- @Override
- public String getName() {
- return "pow";
- }
}
diff --git a/src/main/com/jantuomi/tunkki/exception/types/FunctionArgumentTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/FunctionArgumentTunkkiError.java
index 1b61c86..068b55d 100644
--- a/src/main/com/jantuomi/tunkki/exception/types/FunctionArgumentTunkkiError.java
+++ b/src/main/com/jantuomi/tunkki/exception/types/FunctionArgumentTunkkiError.java
@@ -10,7 +10,7 @@ public class FunctionArgumentTunkkiError extends TunkkiError {
@Override
public String what() {
- return "The parameter list given to function %s is either of wrong length or the parameters are of wrong type. Actual: %s";
+ return "The parameter list given to function is either of wrong length or the parameters are of wrong type. Actual: %s";
}
@Override