[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