コード例 #1
0
    def toBoolean(self, v):
        if v.isUndefined():
            return Value(Value.false)
        if v.isNull():
            return Value(Value.false)
        if v.isBoolean():
            return v
        if v.isInt():
            return Value.boolean(v.toInt())

        obj = v.toObject()
        if obj.isObject():
            return Value(Value.true)
        if obj.isString():
            return Value.boolean(obj.toString())

        assert obj.isDouble()
        double = obj.toDouble()
        if math.isnan(double):
            return Value(Value.false)
        return Value.boolean(double)
コード例 #2
0
    def add(self, left, right):
        left = self.toPrimitive(left)
        right = self.toPrimitive(right)

        ltype = self.type(left)
        rtype = self.type(right)
        if ltype == ecma_type['string'] or rtype == ecma_type['string']:
            left = self.toString(left)
            right = self.toString(right)

            lstr = left.toObject().toString()
            rstr = right.toObject().toString()

            return Value.object(new_string(lstr + rstr))

        left = self.toNumber(left)
        right = self.toNumber(right)

        number = self.numberConvert(left) + self.numberConvert(right)
        return Value(boxed_number(number).value)
コード例 #3
0
ファイル: compiler.py プロジェクト: evilpie/python-js-jit
 def declare_vars(self, vars):
     for var in vars:
         self.ctx.object.addProperty(var.name, Value(Value.undefined))