[pypy-svn] r73633 - in pypy/trunk/pypy/interpreter/pyparser: . test

benjamin at codespeak.net benjamin at codespeak.net
Sat Apr 10 22:13:15 CEST 2010


Author: benjamin
Date: Sat Apr 10 22:13:12 2010
New Revision: 73633

Modified:
   pypy/trunk/pypy/interpreter/pyparser/metaparser.py
   pypy/trunk/pypy/interpreter/pyparser/parser.py
   pypy/trunk/pypy/interpreter/pyparser/test/test_metaparser.py
Log:
make dfas a list to optimize access

Modified: pypy/trunk/pypy/interpreter/pyparser/metaparser.py
==============================================================================
--- pypy/trunk/pypy/interpreter/pyparser/metaparser.py	(original)
+++ pypy/trunk/pypy/interpreter/pyparser/metaparser.py	Sat Apr 10 22:13:12 2010
@@ -146,8 +146,8 @@
                 for label, next in state.arcs.iteritems():
                     arcs.append((self.make_label(gram, label), dfa.index(next)))
                 states.append((arcs, state.is_final))
-            our_id = gram.symbol_ids[name]
-            gram.dfas[our_id] = (states, self.make_first(gram, name))
+            gram.dfas.append((states, self.make_first(gram, name)))
+            assert len(gram.dfas) - 1 == gram.symbol_ids[name] - 256
         gram.start = gram.symbol_ids[self.start_symbol]
         return gram
 

Modified: pypy/trunk/pypy/interpreter/pyparser/parser.py
==============================================================================
--- pypy/trunk/pypy/interpreter/pyparser/parser.py	(original)
+++ pypy/trunk/pypy/interpreter/pyparser/parser.py	Sat Apr 10 22:13:12 2010
@@ -16,7 +16,7 @@
         self.symbol_names = {}
         self.symbol_to_label = {}
         self.keyword_ids = {}
-        self.dfas = {}
+        self.dfas = []
         self.labels = [0]
         self.token_ids = {}
 
@@ -98,7 +98,7 @@
         self.root = None
         current_node = Node(start, None, [], 0, 0)
         self.stack = []
-        self.stack.append((self.grammar.dfas[start], 0, current_node))
+        self.stack.append((self.grammar.dfas[start - 256], 0, current_node))
 
     def add_token(self, token_type, value, lineno, column, line):
         label_index = self.classify(token_type, value, lineno, column, line)
@@ -124,7 +124,7 @@
                         state = dfa[0][state_index]
                     return False
                 elif sym_id >= 256:
-                    sub_node_dfa = self.grammar.dfas[sym_id]
+                    sub_node_dfa = self.grammar.dfas[sym_id - 256]
                     # Check if this token can start a child node.
                     if label_index in sub_node_dfa[1]:
                         self.push(sub_node_dfa, next_state, sym_id, lineno,

Modified: pypy/trunk/pypy/interpreter/pyparser/test/test_metaparser.py
==============================================================================
--- pypy/trunk/pypy/interpreter/pyparser/test/test_metaparser.py	(original)
+++ pypy/trunk/pypy/interpreter/pyparser/test/test_metaparser.py	Sat Apr 10 22:13:12 2010
@@ -33,9 +33,8 @@
         g = self.gram_for("eval: NAME\n")
         assert len(g.dfas) == 1
         eval_sym = g.symbol_ids["eval"]
-        assert eval_sym in g.dfas
         assert g.start == eval_sym
-        states, first = g.dfas[eval_sym]
+        states, first = g.dfas[eval_sym - 256]
         assert states == [([(1, 1)], False), ([], True)]
         assert g.labels[0] == 0
 
@@ -52,7 +51,7 @@
     def test_items(self):
         g = self.gram_for("foo: NAME STRING OP '+'")
         assert len(g.dfas) == 1
-        states = g.dfas[g.symbol_ids["foo"]][0]
+        states = g.dfas[g.symbol_ids["foo"] - 256][0]
         last = states[0][0][0][1]
         for state in states[1:-1]:
             assert last < state[0][0][1]



More information about the Pypy-commit mailing list