[pypy-svn] r40845 - pypy/dist/pypy/lang/js
santagada at codespeak.net
santagada at codespeak.net
Tue Mar 20 16:08:56 CET 2007
Author: santagada
Date: Tue Mar 20 16:08:55 2007
New Revision: 40845
Modified:
pypy/dist/pypy/lang/js/interpreter.py
Log:
global functions
Modified: pypy/dist/pypy/lang/js/interpreter.py
==============================================================================
--- pypy/dist/pypy/lang/js/interpreter.py (original)
+++ pypy/dist/pypy/lang/js/interpreter.py Tue Mar 20 16:08:55 2007
@@ -39,7 +39,10 @@
def evaljs(ctx, args, this):
if len(args) >= 1:
- code = args[0]
+ if isinstance(args[0],W_String):
+ code = args[0]
+ else:
+ return args[0]
else:
code = W_String('')
return load_source(code.ToString()).execute(ctx)
@@ -59,6 +62,36 @@
print functioncode
return evaljs(ctx, [W_String(functioncode),], this)
+def parseIntjs(ctx, args, this):
+ if len(args) < 1:
+ return W_Number(NaN)
+ s = args[0].ToString().strip()
+ if len(args) > 1:
+ radix = args[1].ToInt32()
+ else:
+ radix = 10
+ if len(s) >= 2 and (s.startswith('0x') or s.startswith('0X')) :
+ radix = 16
+ s = s[2:]
+ if s == '' or radix < 2 or radix > 36:
+ return W_Number(NaN)
+ try:
+ n = int(s, radix)
+ except ValueError:
+ n = NaN
+ return W_Number(n)
+
+def parseFloatjs(ctx, args, this):
+ if len(args) < 1:
+ return W_Number(NaN)
+ s = args[0].ToString().strip()
+ try:
+ n = float(s)
+ except ValueError:
+ n = NaN
+ return W_Number(n)
+
+
def printjs(ctx, args, this):
writer(",".join([i.GetValue().ToString() for i in args]))
return w_Undefined
@@ -67,8 +100,19 @@
return W_Object()
def isnanjs(ctx, args, this):
+ if len(args) < 1:
+ return W_Boolean(True)
return W_Boolean(args[0].ToNumber() == NaN)
+def isfinitejs(ctx, args, this):
+ if len(args) < 1:
+ return W_Boolean(True)
+ n = args[0].ToNumber()
+ if n == Infinity or n == -Infinity or n == NaN:
+ return W_Boolean(False)
+ else:
+ return W_Boolean(True)
+
def booleanjs(ctx, args, this):
if len(args) > 0:
return W_Boolean(args[0].ToBoolean())
@@ -140,16 +184,16 @@
w_Number.Put('NaN', W_Number(NaN))
w_Number.Put('POSITIVE_INFINITY', W_Number(Infinity))
w_Number.Put('NEGATIVE_INFINITY', W_Number(-Infinity))
-
w_Global.Put('Number', w_Number)
- w_Global.Put('eval', W_Builtin(evaljs))
- w_Global.Put('print', W_Builtin(printjs))
- w_Global.Put('isNaN', W_Builtin(isnanjs))
- w_Boolean = W_Builtin(booleanjs, Class="Boolean")
w_Global.Put('Boolean', W_Builtin(booleanjs, Class="Boolean"))
-
+ w_Global.Put('eval', W_Builtin(evaljs))
+ w_Global.Put('print', W_Builtin(printjs))
+ w_Global.Put('isNaN', W_Builtin(isnanjs))
+ w_Global.Put('isFinite', W_Builtin(isnanjs))
+ w_Global.Put('parseFloat', W_Builtin(parseFloatjs))
+ w_Global.Put('parseInt', W_Builtin(parseIntjs))
w_Global.Put('NaN', W_Number(NaN))
w_Global.Put('Infinity', W_Number(Infinity))
w_Global.Put('undefined', w_Undefined)
More information about the Pypy-commit
mailing list