From 1f02a9c7a0a8b4885becd385a118454de6d7bf82 Mon Sep 17 00:00:00 2001 From: localhuman Date: Wed, 20 Sep 2017 07:07:15 -0500 Subject: [PATCH] string operations including concatenation work --- boa/code/method.py | 7 +++---- boa/code/token.py | 18 ++++++++++-------- boa/tests/src/StringTest1.py | 7 ++++--- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/boa/code/method.py b/boa/code/method.py index f688c91e4..8d187c788 100644 --- a/boa/code/method.py +++ b/boa/code/method.py @@ -65,7 +65,6 @@ class Method(): tokenizer = None - local_stores = None start_line_no = None @@ -219,10 +218,10 @@ def process_block_groups(self): def tokenize(self): - + prevtoken = None for t in self.tokens: - t.to_vm(self.tokenizer) - + t.to_vm(self.tokenizer, prevtoken) + prevtoken = t def convert_jumps(self): for key,vm_token in self.tokenizer.vm_tokens.items(): diff --git a/boa/code/token.py b/boa/code/token.py index 05a9585cf..992abc4d5 100644 --- a/boa/code/token.py +++ b/boa/code/token.py @@ -69,7 +69,7 @@ def __str__(self): return '%s %s %s' % (self.line_no, self.addr, self.op_name) - def to_vm(self, tokenizer): + def to_vm(self, tokenizer, prev_token=None): self.tokenizer = tokenizer token = None @@ -132,7 +132,13 @@ def to_vm(self, tokenizer): #math elif op == pyop.BINARY_ADD: - token = tokenizer.convert1(OpCode.ADD, self) + print('prevtoken %s ' % prev_token, type(prev_token.args)) + + if prev_token and type(prev_token.args) is str: + print("adding cat!!!") + token = tokenizer.convert1(OpCode.CAT, self) + else: + token = tokenizer.convert1(OpCode.ADD, self) elif op == pyop.BINARY_SUBTRACT: token = tokenizer.convert1(OpCode.SUB, self) @@ -162,12 +168,8 @@ def to_vm(self, tokenizer): elif self.args == '==': token = tokenizer.convert1(OpCode.EQUAL, self) -# tokn = tokenizer.convert1(Op) + return token -# print("created vm token %s " % token) -# -# if token is None: -# print("did not get token for %s %s" % (self, self.op_name)) class VMToken(): @@ -244,7 +246,7 @@ def to_s(self): lno = "{:<10}".format(pt.line_no if do_print_line_no or pstart else '') addr = "{:<4}".format(key) - op = "{:<20}".format(str(pt.op_name)) + op = "{:<20}".format(str(pt.py_op)) arg = "{:<50}".format(to_label if to_label is not None else pt.arg_s) print("%s%s%s%s" % (lno,addr,op,arg)) diff --git a/boa/tests/src/StringTest1.py b/boa/tests/src/StringTest1.py index 1afbac3fa..60cdb249f 100644 --- a/boa/tests/src/StringTest1.py +++ b/boa/tests/src/StringTest1.py @@ -4,12 +4,13 @@ class SCTest(FunctionCode): @staticmethod - def Main(a): + def Main(a, b): + c = a + b - if a == 'hello': + if c == 'hellogoodbye': - return 2 + return a + b + a + b return 1