Author: Stephan <step...@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() _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit