[pypy-commit] lang-js default: moved SymbolMap into separate file
stepahn
noreply at buildbot.pypy.org
Fri Feb 15 14:10:01 CET 2013
Author: Stephan <stephan at stzal.com>
Branch:
Changeset: r351:d1a5abd654d6
Date: 2013-02-15 14:08 +0100
http://bitbucket.org/pypy/lang-js/changeset/d1a5abd654d6/
Log: moved SymbolMap into separate file
diff --git a/js/astbuilder.py b/js/astbuilder.py
--- a/js/astbuilder.py
+++ b/js/astbuilder.py
@@ -4,59 +4,7 @@
from js import operations
-
-class SymbolMap(object):
- def __init__(self):
- self.symbols = {}
- self.functions = []
- self.variables = []
- self.parameters = []
- self.next_index = 0
-
- def add_symbol(self, identifyer):
- #assert isinstance(identifyer, unicode)
- if identifyer not in self.symbols:
- self.symbols[identifyer] = self.next_index
- self.next_index += 1
- idx = self.symbols[identifyer]
- assert isinstance(idx, int)
- return idx
-
- def add_variable(self, identifyer):
- idx = self.add_symbol(identifyer)
-
- self.variables.append(identifyer)
- return idx
-
- def add_function(self, identifyer):
- idx = self.add_symbol(identifyer)
-
- self.functions.append(identifyer)
- return idx
-
- def add_parameter(self, identifyer):
- #assert isinstance(identifyer, unicode)
- f = unicode(identifyer)
- #assert isinstance(f, unicode)
- idx = self.add_symbol(f)
- self.parameters.append(f)
- return idx
-
- def get_index(self, identifyer):
- return self.symbols[identifyer]
-
- def get_symbols(self):
- return self.symbols.keys()
-
- def get_symbol(self, index):
- for symbol, idx in self.symbols.items():
- if idx == index:
- return symbol
-
- def len(self):
- return self.next_index
-
-empty_symbols = SymbolMap()
+from js.symbol_map import SymbolMap
class FakeParseError(Exception):
diff --git a/js/jscode.py b/js/jscode.py
--- a/js/jscode.py
+++ b/js/jscode.py
@@ -5,7 +5,6 @@
from js.exception import JsThrowException
from js.opcodes import opcodes, LABEL, BaseJump
from js.jsobj import W_String
-from js.astbuilder import empty_symbols
def get_printable_location(pc, debug, jscode):
@@ -28,6 +27,9 @@
class AlreadyRun(Exception):
pass
+from js.symbol_map import SymbolMap
+empty_symbols = SymbolMap()
+
class JsCode(object):
_immutable_fields_ = ['compiled_opcodes[*]', '_symbols', 'parameters[*]']
diff --git a/js/object_map.py b/js/object_map.py
--- a/js/object_map.py
+++ b/js/object_map.py
@@ -43,8 +43,9 @@
def empty(self):
return True
+ @jit.elidable
def len(self):
- return self.index
+ return self.index + 1
@jit.elidable
def add(self, name):
diff --git a/js/symbol_map.py b/js/symbol_map.py
new file mode 100644
--- /dev/null
+++ b/js/symbol_map.py
@@ -0,0 +1,49 @@
+from js.object_map import new_map
+
+
+class SymbolMap(object):
+ def __init__(self):
+ self.symbols = new_map()
+ self.functions = []
+ self.variables = []
+ self.parameters = []
+ self.next_index = 0
+
+ def add_symbol(self, identifyer):
+ idx = self.symbols.lookup(identifyer)
+
+ if idx == self.symbols.NOT_FOUND:
+ self.symbols = self.symbols.add(identifyer)
+ idx = self.symbols.lookup(identifyer)
+
+ assert isinstance(idx, int)
+ return idx
+
+ def add_variable(self, identifyer):
+ idx = self.add_symbol(identifyer)
+
+ self.variables.append(identifyer)
+ return idx
+
+ def add_function(self, identifyer):
+ idx = self.add_symbol(identifyer)
+
+ self.functions.append(identifyer)
+ return idx
+
+ def add_parameter(self, identifyer):
+ #assert isinstance(identifyer, unicode)
+ f = unicode(identifyer)
+ #assert isinstance(f, unicode)
+ idx = self.add_symbol(f)
+ self.parameters.append(f)
+ return idx
+
+ def get_index(self, identifyer):
+ return self.symbols.lookup(identifyer)
+
+ def get_symbols(self):
+ return self.symbols.keys()
+
+ def len(self):
+ return self.symbols.len()
More information about the pypy-commit
mailing list