Author: Stephan <[email protected]>
Branch:
Changeset: r266:453ffccebe27
Date: 2012-06-25 11:05 +0200
http://bitbucket.org/pypy/lang-js/changeset/453ffccebe27/
Log: translate wip
diff --git a/js/astbuilder.py b/js/astbuilder.py
--- a/js/astbuilder.py
+++ b/js/astbuilder.py
@@ -17,7 +17,7 @@
self.next_index = 0
def add_symbol(self, identifyer):
- assert isinstance(identifyer, unicode)
+ #assert isinstance(identifyer, unicode)
if identifyer not in self.symbols:
self.symbols[identifyer] = self.next_index
self.next_index += 1
@@ -38,9 +38,9 @@
return idx
def add_parameter(self, identifyer):
- assert isinstance(identifyer, unicode)
+ #assert isinstance(identifyer, unicode)
f = unicode(identifyer)
- assert isinstance(f, unicode)
+ #assert isinstance(f, unicode)
idx = self.add_symbol(f)
self.parameters.append(f)
return idx
@@ -111,7 +111,6 @@
self.funclists = []
self.scopes = []
self.sourcename = ""
- RPythonVisitor.__init__(self)
self.depth = -1
def enter_scope(self):
@@ -123,21 +122,21 @@
def declare_symbol(self, symbol):
s = unicode(symbol)
- assert isinstance(s, unicode)
+ #assert isinstance(s, unicode)
idx = self.scopes[-1].add_symbol(s)
#print 'symbol "%s"@%d in scope %d' % (symbol, idx, self.depth,)
return idx
def declare_variable(self, symbol):
s = unicode(symbol)
- assert isinstance(s, unicode)
+ #assert isinstance(s, unicode)
idx = self.scopes[-1].add_variable(s)
#print 'var declaration "%s"@%d in scope %d' % (symbol, idx,
self.depth,)
return idx
def declare_function(self, symbol, funcobj):
s = unicode(symbol)
- assert isinstance(s, unicode)
+ #assert isinstance(s, unicode)
self.funclists[-1][s] = funcobj
idx = self.scopes[-1].add_function(s)
#print 'func declaration "%s"@%d in scope %d' % (symbol, idx,
self.depth,)
@@ -335,7 +334,7 @@
if l.symbol == "IDENTIFIERNAME":
identifier = l.additional_info
i = unicode(identifier)
- assert isinstance(i, unicode)
+ #assert isinstance(i, unicode)
index = self.declare_symbol(i)
lpos = self.get_pos(l)
left = operations.Identifier(lpos, i, index)
@@ -348,7 +347,7 @@
pos = self.get_pos(node)
name = node.additional_info
n = unicode(name)
- assert isinstance(n, unicode)
+ #assert isinstance(n, unicode)
index = self.declare_symbol(n)
#if self.scopes.is_local(name):
#local = self.scopes.get_local(name)
@@ -414,7 +413,7 @@
funcindex = -1
if declaration:
f = unicode(funcname)
- assert isinstance(f, unicode)
+ #assert isinstance(f, unicode)
funcindex = self.declare_symbol(f)
funcobj = operations.FunctionStatement(pos, funcname, funcindex,
functionbody, scope)
@@ -493,7 +492,7 @@
elif self.is_identifier(left):
identifier = left.get_literal()
i = unicode(identifier)
- assert isinstance(i, unicode)
+ #assert isinstance(i, unicode)
index = self.declare_symbol(i)
return operations.AssignmentOperation(pos, left, identifier,
index, right, operation)
elif self.is_member(left):
@@ -705,7 +704,7 @@
return tree
def parse_to_ast(code):
- assert isinstance(code, unicode)
+ #assert isinstance(code, unicode)
from js.jsparser import parse, ParseError
parse_tree = parse(str(code))
ast = parse_tree_to_ast(parse_tree)
diff --git a/js/builtins.py b/js/builtins.py
--- a/js/builtins.py
+++ b/js/builtins.py
@@ -59,82 +59,82 @@
from js.jsobj import W__Object, W__Function, W_BasicFunction
from js.functions import JsNativeFunction
- empty_func = JsNativeFunction(function_builtins.empty, u'Empty')
- w_FunctionPrototype = W__Function(empty_func, formal_parameter_list = [])
- object_space.assign_proto(w_FunctionPrototype, object_space.proto_object)
- object_space.proto_function = w_FunctionPrototype
+ #empty_func = JsNativeFunction(function_builtins.empty, u'Empty')
+ #w_FunctionPrototype = W__Function(empty_func, formal_parameter_list = [])
+ #object_space.assign_proto(w_FunctionPrototype, object_space.proto_object)
+ #object_space.proto_function = w_FunctionPrototype
- # 15.3.3
- object_space.assign_proto(w_Function, object_space.proto_function)
+ ## 15.3.3
+ #object_space.assign_proto(w_Function, object_space.proto_function)
- # 15.2 Object Objects
- # 15.2.3 Properties of the Object Constructor
- from js.jsobj import W_ObjectConstructor
- w_Object = W_ObjectConstructor()
- object_space.assign_proto(w_Object, object_space.proto_function)
+ ## 15.2 Object Objects
+ ## 15.2.3 Properties of the Object Constructor
+ #from js.jsobj import W_ObjectConstructor
+ #w_Object = W_ObjectConstructor()
+ #object_space.assign_proto(w_Object, object_space.proto_function)
- put_property(w_Object, u'length', _w(1))
+ #put_property(w_Object, u'length', _w(1))
- put_property(global_object, u'Object', w_Object)
+ #put_property(global_object, u'Object', w_Object)
- # 15.2.3.1 Object.prototype
- put_property(w_Object, u'prototype', w_ObjectPrototype, writable = False,
configurable = False, enumerable = False)
+ ## 15.2.3.1 Object.prototype
+ #put_property(w_Object, u'prototype', w_ObjectPrototype, writable = False,
configurable = False, enumerable = False)
- # 14.2.4.1 Object.prototype.constructor
- put_property(w_ObjectPrototype, u'constructor', w_Object)
+ ## 14.2.4.1 Object.prototype.constructor
+ #put_property(w_ObjectPrototype, u'constructor', w_Object)
- import js.builtins_object as object_builtins
- # 15.2.4.2 Object.prototype.toString()
- put_native_function(w_ObjectPrototype, u'toString',
object_builtins.to_string)
- put_native_function(w_ObjectPrototype, u'toLocaleString',
object_builtins.to_string)
+ #import js.builtins_object as object_builtins
+ ## 15.2.4.2 Object.prototype.toString()
+ #put_native_function(w_ObjectPrototype, u'toString',
object_builtins.to_string)
+ #put_native_function(w_ObjectPrototype, u'toLocaleString',
object_builtins.to_string)
- # 15.2.4.3 Object.prototype.valueOf()
- put_native_function(w_ObjectPrototype, u'valueOf',
object_builtins.value_of)
+ ## 15.2.4.3 Object.prototype.valueOf()
+ #put_native_function(w_ObjectPrototype, u'valueOf',
object_builtins.value_of)
- # 15.3 Function Objects
- # 15.3.3 Properties of the Function Constructor
+ ## 15.3 Function Objects
+ ## 15.3.3 Properties of the Function Constructor
- # 15.3.3.1 Function.prototype
- put_property(w_Function, u'prototype', w_FunctionPrototype, writable =
False, configurable = False, enumerable = False)
+ ## 15.3.3.1 Function.prototype
+ #put_property(w_Function, u'prototype', w_FunctionPrototype, writable =
False, configurable = False, enumerable = False)
- # 15.3.3.2 Function.length
- put_property(w_Function, u'length', _w(1), writable = False, configurable
= False, enumerable = False)
+ ## 15.3.3.2 Function.length
+ #put_property(w_Function, u'length', _w(1), writable = False, configurable
= False, enumerable = False)
- # 14.3.4.1 Function.prototype.constructor
- put_property(w_FunctionPrototype, u'constructor', w_Function)
+ ## 14.3.4.1 Function.prototype.constructor
+ #put_property(w_FunctionPrototype, u'constructor', w_Function)
- import js.builtins_function as function_builtins
+ #import js.builtins_function as function_builtins
- # 15.3.4.2 Function.prototype.toString()
- put_native_function(w_FunctionPrototype, u'toString',
function_builtins.to_string)
+ ## 15.3.4.2 Function.prototype.toString()
+ #put_native_function(w_FunctionPrototype, u'toString',
function_builtins.to_string)
- # 15.3.4.3 Function.prototype.apply
- put_native_function(w_FunctionPrototype, u'apply', function_builtins.apply)
+ ## 15.3.4.3 Function.prototype.apply
+ #put_native_function(w_FunctionPrototype, u'apply',
function_builtins.apply)
- # 15.3.4.4 Function.prototype.call
- put_intimate_function(w_FunctionPrototype, u'call', function_builtins.call)
+ ## 15.3.4.4 Function.prototype.call
+ #put_intimate_function(w_FunctionPrototype, u'call',
function_builtins.call)
- import js.builtins_boolean
- js.builtins_boolean.setup(global_object)
+ #import js.builtins_boolean
+ #js.builtins_boolean.setup(global_object)
- import js.builtins_number
- js.builtins_number.setup(global_object)
+ #import js.builtins_number
+ #js.builtins_number.setup(global_object)
- import js.builtins_string
- js.builtins_string.setup(global_object)
+ #import js.builtins_string
+ #js.builtins_string.setup(global_object)
- import js.builtins_array
- js.builtins_array.setup(global_object)
+ #import js.builtins_array
+ #js.builtins_array.setup(global_object)
- #Math
- import js.builtins_math
- js.builtins_math.setup(global_object)
+ ##Math
+ #import js.builtins_math
+ #js.builtins_math.setup(global_object)
- import js.builtins_date
- js.builtins_date.setup(global_object)
+ #import js.builtins_date
+ #js.builtins_date.setup(global_object)
- import js.builtins_global
- js.builtins_global.setup(global_object)
+ #import js.builtins_global
+ #js.builtins_global.setup(global_object)
def get_arg(args, index, default = w_Undefined):
if len(args) > index:
diff --git a/js/environment_record.py b/js/environment_record.py
--- a/js/environment_record.py
+++ b/js/environment_record.py
@@ -55,7 +55,7 @@
# 10.2.1.1.3
def set_mutable_binding(self, identifier, value, strict):
- assert isinstance(identifier, unicode)
+ #assert isinstance(identifier, unicode)
assert self.has_binding(identifier)
if not self._is_mutable_binding(identifier):
from js.execution import JsTypeError
@@ -81,7 +81,7 @@
return False
if self._is_deletable_binding(identifier) is False:
return False
- del(self.delete_binding[identifier])
+ del(self.deletable_bindings[identifier])
del(self.mutable_bindings[identifier])
del(self.bindings[identifier])
return False
@@ -125,7 +125,7 @@
# 10.2.1.2.3
def set_mutable_binding(self, n, v, s):
- assert isinstance(n, unicode)
+ #assert isinstance(n, unicode)
bindings = self.binding_object
bindings.put(n, v, s)
diff --git a/js/execution.py b/js/execution.py
--- a/js/execution.py
+++ b/js/execution.py
@@ -38,29 +38,30 @@
self.value = value
def _msg(self):
- return self.value
+ s = self.value.to_string()
+ return s
class JsTypeError(JsException):
def __init__(self, value):
- assert isinstance(value, unicode)
+ #assert isinstance(value, unicode)
self.value = value
def _msg(self):
- return u'TypeError: %s' % (self.value)
+ return u'TypeError: %s' #% (self.value)
class JsReferenceError(JsException):
def __init__(self, identifier):
self.identifier = identifier
def _msg(self):
- return u'ReferenceError: %s is not defined' % (self.identifier)
+ return u'ReferenceError: %s is not defined' #% (self.identifier)
class JsRangeError(JsException):
def __init__(self, value = None):
self.value = value
def _msg(self):
- return u'RangeError: %s' %(self.value)
+ return u'RangeError: %s' #%(self.value)
class JsSyntaxError(JsException):
def __init__(self, msg = u'', src = u'', line = 0, column = 0):
@@ -72,6 +73,6 @@
def _msg(self):
error_src = self.src.encode('unicode_escape')
if self.error_msg:
- return u'SyntaxError: "%s" in "%s" at line:%d, column:%d'
%(self.error_msg, error_src, self.line, self.column)
+ return u'SyntaxError: "%s" in "%s" at line:%d, column:%d'
#%(self.error_msg, error_src, self.line, self.column)
else:
- return u'SyntaxError: in "%s" at line:%d, column:%d' %(error_src,
self.line, self.column)
+ return u'SyntaxError: in "%s" at line:%d, column:%d' #%(error_src,
self.line, self.column)
diff --git a/js/functions.py b/js/functions.py
--- a/js/functions.py
+++ b/js/functions.py
@@ -56,13 +56,15 @@
def run(self, ctx):
from js.completion import ReturnCompletion
- from js.jsobj import W_Root
+ #from js.jsobj import W_Root
- args = ctx.argv()
- this = ctx.this_binding()
- res = self._function_(this, args)
- w_res = _w(res)
+ #args = ctx.argv()
+ #this = ctx.this_binding()
+ #res = self._function_(this, args)
+ ##w_res = _w(res)
#w_res = res
+ from js.jsobj import w_Undefined, W_Root
+ w_res = w_Undefined
assert isinstance(w_res, W_Root)
compl = ReturnCompletion(value = w_res)
return compl
diff --git a/js/jsobj.py b/js/jsobj.py
--- a/js/jsobj.py
+++ b/js/jsobj.py
@@ -4,6 +4,15 @@
from pypy.rlib.rfloat import isnan, isinf, NAN, formatd, INFINITY
from js.execution import JsTypeError, JsRangeError, ReturnException
+def is_array_index(p):
+ try:
+ return unicode(str(r_uint32(abs(int(p))))) == p
+ except ValueError:
+ return False
+
+def isunicode(s):
+ return unicode(s) is s
+
class W_Root(object):
_type_ = ''
@@ -277,11 +286,10 @@
_extensible_ = True
def __init__(self):
- W_Root.__init__(self)
self._properties_ = {}
self._prototype_ = w_Null
desc = proto_desc
- W_BasicObject.define_own_property(self, u'__proto__', desc)
+ #W_BasicObject.define_own_property(self, u'__proto__', desc)
def __str__(self):
return "%s: %s" % (object.__repr__(self), self.klass())
@@ -300,7 +308,8 @@
# 8.12.3
def get(self, p):
- assert isinstance(p, unicode)
+ #assert isinstance(p, unicode)
+ assert isunicode(p)
desc = self.get_property(p)
if desc is None:
@@ -318,7 +327,8 @@
# 8.12.1
def get_own_property(self, p):
- assert isinstance(p, unicode)
+ #assert isinstance(p, unicode)
+ assert isunicode(p)
if p not in self._properties_:
return None
@@ -338,7 +348,8 @@
# 8.12.2
def get_property(self, p):
- assert isinstance(p, unicode)
+ #assert isinstance(p, unicode)
+ assert isunicode(p)
prop = self.get_own_property(p)
if prop is not None:
@@ -352,7 +363,9 @@
# 8.12.5
def put(self, p, v, throw = False):
- assert isinstance(p, unicode)
+ #assert isinstance(p, unicode)
+ assert isunicode(p)
+
if self.can_put(p) is False:
if throw is True:
raise JsTypeError(u'')
@@ -407,7 +420,9 @@
# 8.12.6
def has_property(self, p):
- assert isinstance(p, unicode)
+ #assert isinstance(p, unicode)
+ assert isunicode(p)
+
desc = self.get_property(p)
if desc is None:
return False
@@ -589,7 +604,6 @@
class W__PrimitiveObject(W_BasicObject):
def __init__(self, primitive_value):
- W_BasicObject.__init__(self)
self.set_primitive_value(primitive_value)
def PrimitiveValue(self):
@@ -861,7 +875,6 @@
def __init__(self, function_body, formal_parameter_list=[], scope=None,
strict=False):
from js.object_space import object_space
- W_BasicFunction.__init__(self)
self._function_ = function_body
self._scope_ = scope
self._params_ = formal_parameter_list
@@ -936,7 +949,6 @@
_class_ = 'Arguments'
def __init__(self, func, names, args, env, strict = False):
- W__Object.__init__(self)
self.strict = strict
_len = len(args)
put_property(self, u'length', _w(_len), writable = True, enumerable =
False, configurable = True)
@@ -977,7 +989,6 @@
# 15.4.2
class W_ArrayConstructor(W_BasicFunction):
def __init__(self):
- W_BasicFunction.__init__(self)
put_property(self, u'length', _w(1), writable = False, enumerable =
False, configurable = False)
def is_callable(self):
@@ -1017,7 +1028,6 @@
_type_ = 'boolean'
def __init__(self, boolval):
- W_Primitive.__init__(self)
self._boolval_ = bool(boolval)
def __str__(self):
@@ -1040,12 +1050,19 @@
def to_boolean(self):
return self._boolval_
+def _isspace(s):
+ whitespace = {u' ':None, u'\n':None, u'\t':None, u'\r':None}
+ for i in xrange(len(s)):
+ if s[i] not in whitespace:
+ return False
+ return True
+
class W_String(W_Primitive):
_type_ = 'string'
def __init__(self, strval):
- assert isinstance(strval, unicode)
- W_Primitive.__init__(self)
+ #assert isinstance(strval, unicode)
+ assert isunicode(strval)
self._strval_ = strval
def __eq__(self, other):
@@ -1070,11 +1087,11 @@
def ToNumber(self):
u_strval = self._strval_
- assert isinstance(u_strval, unicode)
- import re
+
if u_strval == u'':
return 0.0
- if re.match('^\s*$', u_strval):
+
+ if _isspace(u_strval):
return 0.0
strval = str(u_strval)
@@ -1124,7 +1141,6 @@
""" Number known to be an integer
"""
def __init__(self, intval):
- W_Number.__init__(self)
self._intval_ = intmask(intval)
def __str__(self):
@@ -1152,8 +1168,7 @@
"""
def __init__(self, floatval):
assert isinstance(floatval, float)
- W_Number.__init__(self)
- self._floatval_ = float(floatval)
+ self._floatval_ = floatval
def __str__(self):
return 'W_FloatNumber(%s)' % (self._floatval_,)
@@ -1239,7 +1254,6 @@
def __init__(self, length = w_0):
assert isinstance(length, W_Root)
- W_BasicObject.__init__(self)
desc = PropertyDescriptor(value = length, writable = True, enumerable
= False, configurable = False)
W_BasicObject.define_own_property(self, u'length', desc)
@@ -1310,7 +1324,9 @@
# 4
elif is_array_index(p):
- assert isinstance(p, unicode)
+ #assert isinstance(p, unicode)
+ assert isunicode(p)
+
# a
index = r_uint32(int(p))
# b
@@ -1333,12 +1349,6 @@
# 5
return W_BasicObject.define_own_property(self, p, desc, throw)
-def is_array_index(p):
- try:
- return unicode(str(r_uint32(abs(int(p))))) == p
- except ValueError:
- return False
-
from pypy.rlib.objectmodel import specialize
@specialize.argtype(0)
def _w(value):
@@ -1350,7 +1360,9 @@
return W_IntNumber(value)
elif isinstance(value, float):
return W_FloatNumber(value)
- elif isinstance(value, unicode):
+ #elif isinstance(value, unicode):
+ #return W_String(value)
+ elif isunicode(value):
return W_String(value)
elif isinstance(value, str):
return W_String(unicode(value))
diff --git a/js/object_space.py b/js/object_space.py
--- a/js/object_space.py
+++ b/js/object_space.py
@@ -1,6 +1,17 @@
-from js.jsobj import _w, W_BasicObject, W__Object, W_BasicFunction,
W__Function, W_DateObject, W_BooleanObject, W_StringObject, W_NumericObject,
W__Array
+from js.jsobj import _w, W_BasicObject, W__Object, W_BasicFunction,
W__Function, W_DateObject, W_BooleanObject, W_StringObject, W_NumericObject,
W__Array, w_Null
class ObjectSpace(object):
+ def __init__(self):
+ self.global_context = None
+ self.global_object = None
+ self.proto_function = w_Null
+ self.proto_boolean = w_Null
+ self.proto_number = w_Null
+ self.proto_string = w_Null
+ self.proto_array = w_Null
+ self.proto_date = w_Null
+ self.proto_object = w_Null
+
def get_global_environment(self):
return self.global_context.variable_environment()
diff --git a/js/opcodes.py b/js/opcodes.py
--- a/js/opcodes.py
+++ b/js/opcodes.py
@@ -94,12 +94,12 @@
class LOAD_STRINGCONSTANT(Opcode):
_immutable_fields_ = ['w_stringvalue']
def __init__(self, value):
- assert isinstance(value, unicode)
+ #assert isinstance(value, unicode)
self.strval = value
def eval(self, ctx):
strval = self.strval
- assert isinstance(strval, unicode)
+ #assert isinstance(strval, unicode)
w_string = W_String(strval)
ctx.stack_append(w_string)
@@ -402,7 +402,7 @@
left = ctx.stack_pop()
member = ctx.stack_pop()
name = member.to_string()
- assert isinstance(name, unicode)
+ #assert isinstance(name, unicode)
value = ctx.stack_pop()
diff --git a/js/operations.py b/js/operations.py
--- a/js/operations.py
+++ b/js/operations.py
@@ -312,7 +312,7 @@
def __init__(self, pos, left, name):
n = name.get_literal()
uname = unicode(n)
- assert isinstance(uname, unicode)
+ #assert isinstance(uname, unicode)
self.name = uname
self.left = left
self.pos = pos
@@ -642,7 +642,7 @@
class String(Expression):
def __init__(self, pos, strval):
- assert isinstance(strval, unicode)
+ #assert isinstance(strval, unicode)
self.pos = pos
self.strval = self.string_unquote(strval)
@@ -651,12 +651,12 @@
def emit(self, bytecode):
strval = self.strval
- assert isinstance(strval, unicode)
+ #assert isinstance(strval, unicode)
bytecode.emit('LOAD_STRINGCONSTANT', strval)
def string_unquote(self, string):
- s = decode_unicode_escape(string)
- #s = string
+ #s = decode_unicode_escape(string)
+ s = string
if s.startswith('"'):
assert s.endswith('"')
else:
@@ -668,7 +668,7 @@
return unicode(s)
def decode_unicode_escape(string):
- assert isinstance(string, unicode)
+ #assert isinstance(string, unicode)
from pypy.rlib.runicode import str_decode_unicode_escape,
str_decode_raw_unicode_escape
result, consumed = str_decode_unicode_escape(string, len(string), "strict")
return result
@@ -680,7 +680,7 @@
return result
def encode_unicode_utf8(string):
- assert isinstance(string, unicode)
+ #assert isinstance(string, unicode)
from pypy.rlib.runicode import unicode_encode_utf_8
result, consumed = str_decode_utf_8(string, len(string), "strict")
return result
diff --git a/js/test/test_w_string.py b/js/test/test_w_string.py
new file mode 100644
--- /dev/null
+++ b/js/test/test_w_string.py
@@ -0,0 +1,18 @@
+import py
+
+from js.jsobj import W_String
+
+def test_string_to_number():
+ assert W_String(u'').ToNumber() == 0
+ assert W_String(u' ').ToNumber() == 0
+ assert W_String(u'\t').ToNumber() == 0
+ assert W_String(u'\n').ToNumber() == 0
+ assert W_String(u'\r').ToNumber() == 0
+ assert W_String(u'\r\n').ToNumber() == 0
+
+def test_isspace():
+ from js.jsobj import _isspace
+ assert _isspace(' ') is True
+ assert _isspace(' ') is True
+ assert _isspace(' \t\t\r\n ') is True
+ assert _isspace(' \t\ts\r\n ') is False
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit