コード例 #1
0
    def test_make_node(self):
        self.clearOutput()
        l = symbols.NUMBER(2, lineno=1)
        u = symbols.NUMBER(3, lineno=2)
        symbols.BOUND.make_node(l, u, 3)
        self.assertEqual(self.stderr, '')

        l = symbols.NUMBER(4, lineno=1)
        symbols.BOUND.make_node(l, u, 3)
        self.assertEqual(
            self.stderr,
            '(stdin):3: Lower array bound must be less or equal to upper one\n'
        )

        self.clearOutput()
        l = symbols.NUMBER(-4, lineno=1)
        symbols.BOUND.make_node(l, u, 3)
        self.assertEqual(self.stderr,
                         '(stdin):3: Array bounds must be greater than 0\n')

        self.clearOutput()
        l = symbols.VAR('a', 10)
        symbols.BOUND.make_node(l, u, 3)
        self.assertEqual(self.stderr,
                         '(stdin):3: Array bounds must be constants\n')
コード例 #2
0
 def setUp(self):
     STR = "ZXBASIC"
     self.str_ = symbols.STRING(STR, 1)
     self.lower = symbols.NUMBER(
         1, 1, type_=gl.SYMBOL_TABLE.basic_types[gl.STR_INDEX_TYPE])
     self.upper = symbols.NUMBER(
         2, 1, type_=gl.SYMBOL_TABLE.basic_types[gl.STR_INDEX_TYPE])
コード例 #3
0
 def test_make_node_warn(self):
     gl.SYMBOL_TABLE.declare_array('test', 1, symbols.TYPEREF(self.arr.type_, 1),
                                   bounds=self.bounds)
     self.arg[1] = symbols.ARGUMENT(symbols.NUMBER(9, 1), 1)
     aa = symbols.ARRAYACCESS.make_node('test', self.arg, lineno=2)
     self.assertIsNotNone(aa)
     self.assertEqual(self.OUTPUT, "(stdin):2: warning: Array 'test' subscript out of range\n")
コード例 #4
0
 def test_make_node_fail(self):
     gl.SYMBOL_TABLE.declare_array('test', 1, symbols.TYPEREF(self.arr.type_, 1),
                                   bounds=self.bounds)
     self.arg = symbols.ARGLIST(symbols.ARGUMENT(symbols.NUMBER(2, 1), 1))
     aa = symbols.ARRAYACCESS.make_node('test', self.arg, lineno=2)
     self.assertIsNone(aa)
     self.assertEqual(self.OUTPUT, "(stdin):2: Array 'test' has 2 dimensions, not 1\n")
コード例 #5
0
 def setUp(self):
     zxbpp.init()
     l1 = 1
     l2 = 2
     l3 = 3
     l4 = 4
     b = symbols.BOUND(l1, l2)
     c = symbols.BOUND(l3, l4)
     self.bounds = symbols.BOUNDLIST.make_node(None, b, c)
     self.arr = symbols.VARARRAY('test', self.bounds, 1, type_=Type.ubyte)
     self.arg = symbols.ARGLIST(symbols.ARGUMENT(symbols.NUMBER(2, 1, type_=Type.uinteger), 1),
                                symbols.ARGUMENT(symbols.NUMBER(3, 1, type_=Type.uinteger), 1))
     gl.SYMBOL_TABLE = SymbolTable()
     # Clears stderr and prepares for capturing it
     config.OPTIONS.remove_option('stderr')
     config.OPTIONS.add_option('stderr', None, StringIO())
     config.OPTIONS.add_option_if_not_defined('explicit', None, False)
コード例 #6
0
ファイル: test_symbolBINARY.py プロジェクト: mattl/zxbasic
 def setUp(self):
     zxbpp.init()
     self.l = symbols.VAR('a', lineno=1, type_=Type.ubyte)
     self.r = symbols.NUMBER(3, lineno=2)
     self.b = symbols.BINARY('PLUS', self.l, self.r, lineno=3)
     self.st = symbols.STRING("ZXBASIC", lineno=1)
     if OPTIONS.has_option('stderr'):
         OPTIONS.remove_option('stderr')
     OPTIONS.add_option('stderr', type_=None, default_value=StringIO())
コード例 #7
0
ファイル: optimize.py プロジェクト: bartsanchez/zxbasic
 def visit_ADDRESS(self, node):
     if node.operand.token != 'ARRAYACCESS':
         if not chk.is_dynamic(node.operand):
             node = symbols.CONST(node, node.lineno)
     elif node.operand.offset is not None:  # A constant access. Calculate offset
         node = symbols.BINARY.make_node(
             'PLUS',
             symbols.UNARY('ADDRESS',
                           node.operand.entry,
                           node.lineno,
                           type_=self.TYPE(gl.PTR_TYPE)),
             symbols.NUMBER(node.operand.offset,
                            lineno=node.operand.lineno,
                            type_=self.TYPE(gl.PTR_TYPE)),
             lineno=node.lineno,
             func=lambda x, y: x + y)
     yield node
コード例 #8
0
 def test_upper__setter(self):
     s = symbols.STRSLICE(self.str_, self.lower, self.upper, 1)
     s.upper = symbols.NUMBER(
         44, 1, type_=gl.SYMBOL_TABLE.basic_types[gl.STR_INDEX_TYPE])
     self.assertEqual(s.upper, 44)
コード例 #9
0
 def setUp(self):
     self.VALUE = 5
     self.value = symbols.NUMBER(self.VALUE, 1)
     self.a = symbols.ARGLIST(
         symbols.ARGUMENT(symbols.NUMBER(self.VALUE, 1), 1))
コード例 #10
0
 def test_make_node_single2(self):
     b = symbols.ARGLIST.make_node(
         None, symbols.ARGUMENT(symbols.NUMBER(self.VALUE, 1), 1))
     self.assertIsInstance(b, symbols.ARGLIST)
     self.assertEqual(len(b), 1)
     self.assertEqual(b[0], self.value)
コード例 #11
0
 def test_args_setter(self):
     self.a[0] = symbols.ARGUMENT(symbols.NUMBER(self.VALUE + 1, 1), 1)
     self.assertEqual(self.a[0], self.value + 1)
コード例 #12
0
 def test_body_setter(self):
     body = symbols.BLOCK(symbols.NUMBER(0, lineno=1))
     self.f.body = body
     self.assertEqual(len(self.f.body), len(body))
     self.assertEqual(self.f.body, body)