commit 64e83e42aef2b9a2990292d9d42ef21f459cc7c3
parent fd937c7f328509c1b4b8329a6460c99e079cb2b8
Author: Paul Longtine <paullongtine@gmail.com>
Date: Thu, 30 Jun 2016 13:13:16 -0400
It can find names properly now... I just need to figure out the other end.
Diffstat:
6 files changed, 30 insertions(+), 19 deletions(-)
diff --git a/src/lc/bytecode.py b/src/lc/bytecode.py
@@ -95,7 +95,7 @@ class VariableAssignment():
def action(self):
if self.label.is_property:
- return(PropertyAssignment(self.label.obj,
+ return(PropertyAssignment(self.label.parent,
self.label,
self.expr).action())
else:
@@ -112,7 +112,7 @@ class VariableGet():
def action(self):
if self.label.is_property:
- return(PropertyGet(self.label.obj, self.label).action())
+ return(PropertyGet(self.label.parent, self.label).action())
else:
return([
OP_LOV,
@@ -142,7 +142,7 @@ class FunctionCall():
def action(self):
if self.label.is_property:
- return(MethodCall(self.label.obj,
+ return(MethodCall(self.label.parent,
self.label,
self.arguements).action())
else:
diff --git a/src/lc/helper.py b/src/lc/helper.py
@@ -42,6 +42,7 @@ def token_split(tokenstring, esc_chars, split_chars, include_splitter=True):
# This here takes a number and chops it up into a series of byte-width numbers
# i.e 42 -> [42], 256 -> [1, 0]
#
+# TODO: I don't want to use this anymore but it's just for testing.
def int_to_bytes(number):
rv = []
c = 0
diff --git a/src/lc/interpreter.py b/src/lc/interpreter.py
@@ -37,6 +37,7 @@ class Label(AbstractToken):
self.name = names[1]
t = self.i.ns.resolve_with_obj(self.parent, self.name)
+ self.expr = t[0]
else:
self.name = names[0]
t = self.i.ns.resolve(self.name)
@@ -47,6 +48,7 @@ class Label(AbstractToken):
if s:
return(self.scope)
else:
+ print(self.name, self.expr)
return(int_to_word(self.expr))
class Arguements(AbstractToken):
diff --git a/src/lc/main.py b/src/lc/main.py
@@ -38,7 +38,7 @@ if __name__ == "__main__":
for n, l in enumerate(itr.program):
print("{}: {} <= ".format(str(n).rjust(4),
l[0].name.rjust(15),
- l[1]),
+ l[1]),
end="")
for e in l[2]:
t = e.action()
diff --git a/src/lc/namespace.py b/src/lc/namespace.py
@@ -53,33 +53,43 @@ class Namespace():
self.t = None
def copy(self, new_name, name):
- self.ns[self.sc][new_name][1] = self.obj_resolve(name)[1]
+ self.ns[self.sc][new_name][1] = self.obj_resolve(name)
# Resolves name into object
def obj_resolve(self, name):
rv = None
- for namespace in self.scopes:
- for names in namespace:
- if name in names.keys() and rv == None:
- rv = names[name]
- elif rv != None:
- print("{} was found, but found again".format(name))
+ if name in self.ns[0].keys():
+ rv = self.ns[0][name][1]
+ else:
+ for namespace in self.scopes:
+ for names in namespace:
+ if name in names.keys() and rv == None:
+ rv = names[name][1]
+ elif rv != None:
+ print("{} was found, but found again".format(name))
return rv
- def resolve_with_obj(self, obj, name):
- t = self.obj_resolve(obj)
- print(t)
+ def resolve_with_obj(self, parent, name):
+ rv = None
+ obj = self.obj_resolve(parent.name)
+ print(parent.name, name)
+ if name in obj:
+ rv = obj[name]
+
+ return rv
# Resolves name into scope and address
def resolve(self, name):
rv = None
-
if name in self.ns[0].keys():
rv = [1, self.ns[0][name][0]]
elif name in self.ns[-1].keys():
rv = [0, self.ns[-1][name][0]]
else:
- print("Out of scope tbi")
-
+ for x, names in enumerate(self.scopes):
+ if name in names[0].keys():
+ rv = [((x + 1) << 1) + 1, names[0][name][0]]
+ elif name in names[-1].keys():
+ rv = [((x + 1) << 1) + 0, names[-1][name][0]]
return rv
diff --git a/src/lc/test_files/class.ti b/src/lc/test_files/class.ti
@@ -58,6 +58,4 @@ class ObjectFibb:
ObjectFibb test = new ObjectFibb();
-print test.c.data;
-
test.run(15);