[pypy-commit] lang-js default: satisfy the translator

stepahn noreply at buildbot.pypy.org
Wed Jun 8 12:43:24 CEST 2011


Author: Stephan <stephan at 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')
 


More information about the pypy-commit mailing list