Author: Stephan <step...@stzal.com> Branch: Changeset: r97:c7207d514c53 Date: 2011-06-08 12:40 +0200 http://bitbucket.org/pypy/lang-js/changeset/c7207d514c53/
Log: satisfy the translator diff --git a/js/astbuilder.py b/js/astbuilder.py --- a/js/astbuilder.py +++ b/js/astbuilder.py @@ -12,18 +12,14 @@ return 'Scope ' + repr(self.local_variables) def add_local(self, identifier): - if not self.is_local(identifier): + if not self.is_local(identifier) == True: self.local_variables.append(identifier) - return self.get_local(identifier) def is_local(self, identifier): return identifier in self.local_variables def get_local(self, identifier): - if self.is_local(identifier): - return self.local_variables.index(identifier) - else: - return None + return self.local_variables.index(identifier) class Scopes(object): def __init__(self): @@ -42,17 +38,22 @@ self.scopes.pop() def identifiers(self): - if self.current_scope() is not None: + if self.scope_present(): return self.current_scope().local_variables return [] + def is_local(self, identifier): + return self.scope_present() == True and self.current_scope().is_local(identifier) == True + + def scope_present(self): + return self.current_scope() is not None + def add_local(self, identifier): - if self.current_scope() is not None: - return self.current_scope().add_local(identifier) + if self.scope_present(): + self.current_scope().add_local(identifier) def get_local(self, identifier): - if self.current_scope() is not None: - return self.current_scope().get_local(identifier) + return self.current_scope().get_local(identifier) class FakeParseError(Exception): def __init__(self, pos, msg): @@ -278,8 +279,8 @@ def visit_IDENTIFIERNAME(self, node): pos = self.get_pos(node) name = node.additional_info - local = self.scopes.get_local(name) - if local is not None: + if self.scopes.is_local(name): + local = self.scopes.get_local(name) return operations.LocalIdentifier(pos, name, local) return operations.Identifier(pos, name) @@ -342,13 +343,16 @@ def visit_variabledeclaration(self, node): pos = self.get_pos(node) identifier = self.dispatch(node.children[0]) - local = self.scopes.add_local(identifier.get_literal()) - self.varlists[-1][identifier.get_literal()] = None + identifier_name = identifier.get_literal() + self.scopes.add_local(identifier_name) + self.varlists[-1][identifier_name] = None if len(node.children) > 1: expr = self.dispatch(node.children[1]) else: expr = None - if local is not None: + + if self.scopes.is_local(identifier_name): + local = self.scopes.get_local(identifier_name) return operations.LocalVariableDeclaration(pos, identifier, local, expr) else: return operations.VariableDeclaration(pos, identifier, expr) diff --git a/js/jsobj.py b/js/jsobj.py --- a/js/jsobj.py +++ b/js/jsobj.py @@ -605,17 +605,14 @@ return self.local_values[idx].value def get_local_index(self, name): - if name in self.local_identifiers: - return self.local_identifiers.index(name) - else: - return None + return self.local_identifiers.index(name) def assign_local(self, idx, value): self.local_values[idx].value = value def delete_local(self, identifier): - idx = self.get_local_index(identifier) - if idx is not None: + if identifier in self.local_identifiers: + idx = self.get_local_index(identifier) self.local_variables[idx] = None self.local_identifiers[idx] = None diff --git a/js/operations.py b/js/operations.py --- a/js/operations.py +++ b/js/operations.py @@ -195,7 +195,7 @@ class LocalAssignmentOperation(AssignmentOperation): def __init__(self, pos, left, right, operand, post = False): self.left = left - self.local = left.local + self.local = left.get_local() self.identifier = left.get_literal() self.right = right if self.right is None: @@ -793,6 +793,9 @@ def get_literal(self): return self.identifier + def get_local(self): + return self.local + class VariableIdentifier(Expression): def __init__(self, identifier): self.pos = pos diff --git a/js/test/test_locals.py b/js/test/test_locals.py --- a/js/test/test_locals.py +++ b/js/test/test_locals.py @@ -4,17 +4,20 @@ def test_scopes_is_local(): scopes = Scopes() + scopes.new_scope() - assert scopes.get_local('a') is None + assert scopes.is_local('a') is False scopes.add_local('a') - assert scopes.get_local('a') is not None + assert scopes.is_local('a') is True + assert scopes.is_local('b') is False scopes.add_local('b') - assert scopes.get_local('b') is not None + assert scopes.is_local('b') is True + scopes.new_scope() - assert scopes.get_local('a') is None + assert scopes.is_local('a') is False scopes.add_local('a') - assert scopes.get_local('a') is not None - assert scopes.get_local('b') is None + assert scopes.is_local('a') is True + assert scopes.is_local('b') is False def test_scopes_get_local(): scopes = Scopes() @@ -23,10 +26,10 @@ scopes.add_local('b') assert scopes.get_local('a') == 0 assert scopes.get_local('b') == 1 - assert scopes.get_local('c') is None + py.test.raises(ValueError, scopes.get_local, 'c') scopes.new_scope() scopes.add_local('b') assert scopes.get_local('b') == 0 - assert scopes.get_local('a') is None + py.test.raises(ValueError, scopes.get_local, 'a') _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit