diff options
| author | Jan Tuomi <jan-sebastian.tuomi@aalto.fi> | 2016-08-06 21:01:36 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan-sebastian.tuomi@aalto.fi> | 2016-08-06 21:01:36 +0300 |
| commit | 0f5331fe7448d935d783f927dcb870589bbb0c52 (patch) | |
| tree | 069fa8be1ca2ec5cd09ba8121a92194f907ec2bf /src/main/com/jantuomi/tunkki | |
| parent | dcfe0b2074a871416530c124937811d71f71cf75 (diff) | |
Fix bug where calling methods of objects would not actually call the function
Diffstat (limited to 'src/main/com/jantuomi/tunkki')
4 files changed, 11 insertions, 23 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/ObjectMemberNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/ObjectMemberNode.java index 51e53fa..c2eb637 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/ObjectMemberNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/ObjectMemberNode.java @@ -1,5 +1,6 @@ package com.jantuomi.tunkki.core.parser.ast; +import com.jantuomi.tunkki.core.parser.datatype.CallableDatatype; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.ObjectDatatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; @@ -8,8 +9,6 @@ import com.jantuomi.tunkki.exception.types.NotAnObjectTunkkiError; import com.jantuomi.tunkki.exception.types.TunkkiError; import com.jantuomi.tunkki.exception.types.UndeclaredSymbolTunkkiError; -import java.util.Collections; - /** * Created by jan on 3.8.2016. */ @@ -22,7 +21,7 @@ public class ObjectMemberNode extends UnaryOperatorNode { public Datatype evaluate() throws TunkkiError { Datatype d; try { - d = State.getInstance().evaluateSymbol(getText()); + d = State.getInstance().resolveSymbol(getText()); } catch (TunkkiError ex) { ex.setLine(getLine()); throw ex; @@ -36,14 +35,14 @@ public class ObjectMemberNode extends UnaryOperatorNode { ASTNode member = getOperand(); if (member instanceof CallNode) { CallNode cn = (CallNode) member; - Datatype res = od.getData().resolveSymbol(cn.getName(), cn.evaluateParameters()); - if (res != null) { - return res; + Datatype callable = od.getData().resolveSymbol(cn.getName()); + if (callable != null) { + return ((CallableDatatype) callable).call(cn.evaluateParameters()); } } else if (member instanceof SymbolNode) { SymbolNode sn = (SymbolNode) member; - Datatype res = od.getData().resolveSymbol(sn.getName(), Collections.emptyList()); + Datatype res = od.getData().resolveSymbol(sn.getName()); if (res != null) { return res; } 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 d85697a..7fb5e64 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java @@ -3,12 +3,10 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.runtime.State; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.ExceptionManager; import com.jantuomi.tunkki.exception.types.TunkkiError; import com.jantuomi.tunkki.exception.types.UndeclaredSymbolTunkkiError; import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -46,7 +44,7 @@ public class SymbolNode extends ASTNode { Datatype returnValue; try { - returnValue = State.getInstance().evaluateSymbol(name, Collections.emptyList()); + returnValue = State.getInstance().resolveSymbol(name); } /* If a TunkkiError is caught, pass it on with line information */ diff --git a/src/main/com/jantuomi/tunkki/core/runtime/Scope.java b/src/main/com/jantuomi/tunkki/core/runtime/Scope.java index 7238505..9a33b54 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/Scope.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/Scope.java @@ -35,12 +35,12 @@ public class Scope { setVariableValue(symbol, value); } - public Datatype resolveSymbol(String symbol, List<Datatype> params) throws TunkkiError { + public Datatype resolveSymbol(String symbol) throws TunkkiError { if (variables.containsKey(symbol)) { return variables.get(symbol); } else if (parent != null) { - return parent.resolveSymbol(symbol, params); + return parent.resolveSymbol(symbol); } else { throw new UndeclaredSymbolTunkkiError(-1, symbol); diff --git a/src/main/com/jantuomi/tunkki/core/runtime/State.java b/src/main/com/jantuomi/tunkki/core/runtime/State.java index e5f53b4..2cbd94a 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/State.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/State.java @@ -40,17 +40,8 @@ public class State { scopes.push(globalScope); } - private Datatype resolveSymbol(String symbol) throws TunkkiError { - return scopes.peek().resolveSymbol(symbol, Arrays.asList()); - } - - public Datatype evaluateSymbol(String symbol) throws TunkkiError { - Datatype d = resolveSymbol(symbol); - return d; - } - - public Datatype evaluateSymbol(String symbol, List<Datatype> parameters) throws TunkkiError { - return scopes.peek().resolveSymbol(symbol, parameters); + public Datatype resolveSymbol(String symbol) throws TunkkiError { + return scopes.peek().resolveSymbol(symbol); } public Scope createScope() { |
