2017-03-23 | Paul Boddie | raw annotate files changeset graph | Represent integers as __attr values with bit 0 set. Since pointers must be aligned (to four-byte boundaries on many modern systems, maybe two-byte boundaries on older or embedded systems, eight-byte boundaries on some 64-bit systems), any value with bit 0 set will not be referencing an object. This avoids allocating objects for integers and instead just allows them to be passed around. Bit 0 needs to be tested when attributes are accessed, and for integers, a common instance is employed to provide any instance attributes, an instance table reference and a reference to the integer class. | integers-as-tagged-attrs |
1 from pyparser.automata import DFA, DEFAULT 2 from pyparser.genpytokenize import output 3 4 def test_states(): 5 states = [{"\x00": 1}, {"\x01": 0}] 6 d = DFA(states[:], [False, True]) 7 assert output('test', DFA, d, states) == """\ 8 accepts = [False, True] 9 states = [ 10 # 0 11 {'\\x00': 1}, 12 # 1 13 {'\\x01': 0}, 14 ] 15 test = automata.pyparser.automata.DFA(states, accepts) 16 """