def math_log(wrapper, arguments, traverser):
    """Return a better value than the standard python log function."""
    args = [traverser._traverse_node(a) for a in arguments]
    if not args:
        return JSWrapper(0, traverser=traverser)

    arg = actions._get_as_num(args[0].get_literal_value())
    if arg == 0:
        return JSWrapper(float('-inf'), traverser=traverser)

    if arg < 0:
        return JSWrapper(traverser=traverser)

    arg = math.log(arg)
    return JSWrapper(arg, traverser=traverser)
Beispiel #2
0
def math_log(wrapper, arguments, traverser):
    """Return a better value than the standard python log function."""
    args = [traverser._traverse_node(a) for a in arguments]
    if not args:
        return JSWrapper(0, traverser=traverser)

    arg = actions._get_as_num(args[0].get_literal_value())
    if arg == 0:
        return JSWrapper(float('-inf'), traverser=traverser)

    if arg < 0:
        return JSWrapper(traverser=traverser)

    arg = math.log(arg)
    return JSWrapper(arg, traverser=traverser)
Beispiel #3
0
def math_round(wrapper, arguments, traverser):
    """Return a better value than the standard python round function."""
    args = [traverser._traverse_node(a) for a in arguments]
    if not args:
        return JSWrapper(0, traverser=traverser)

    arg = actions._get_as_num(args[0].get_literal_value())
    # Prevent nasty infinity tracebacks.
    if abs(arg) == float('inf'):
        return args[0]

    # Python rounds away from zero, JS rounds "up".
    if arg < 0 and int(arg) != arg:
        arg += 0.0000000000000001
    arg = round(arg)
    return JSWrapper(arg, traverser=traverser)
def math_round(wrapper, arguments, traverser):
    """Return a better value than the standard python round function."""
    args = [traverser._traverse_node(a) for a in arguments]
    if not args:
        return JSWrapper(0, traverser=traverser)

    arg = actions._get_as_num(args[0].get_literal_value())
    # Prevent nasty infinity tracebacks.
    if abs(arg) == float('inf'):
        return args[0]

    # Python rounds away from zero, JS rounds "up".
    if arg < 0 and int(arg) != arg:
        arg += 0.0000000000000001
    arg = round(arg)
    return JSWrapper(arg, traverser=traverser)
Beispiel #5
0
    def contains(self, value):
        """Serves 'in' for BinaryOperators for lists and dictionaries"""

        # Unwrap the rvalue.
        if isinstance(value, JSWrapper):
            value = value.get_literal_value()

        if isinstance(self.value, JSArray):
            from actions import _get_as_num
            index = int(_get_as_num(value))
            if len(self.value.elements) > index >= 0:
                return True

        if isinstance(self.value, (JSArray, JSObject, JSPrototype)):
            return self.value.has_var(value)

        # Nothing else supports "in"
        return False
Beispiel #6
0
    def contains(self, value):
        """Serves 'in' for BinaryOperators for lists and dictionaries"""

        # Unwrap the rvalue.
        if isinstance(value, JSWrapper):
            value = value.get_literal_value()

        if isinstance(self.value, JSArray):
            from actions import _get_as_num
            index = int(_get_as_num(value))
            if len(self.value.elements) > index >= 0:
                return True

        if isinstance(self.value, (JSArray, JSObject, JSPrototype)):
            return self.value.has_var(value)

        # Nothing else supports "in"
        return False
Beispiel #7
0
 def _process_literal(type_, literal):
     if type_ == 'string':
         return actions._get_as_str(literal)
     elif type_ == 'num':
         return actions._get_as_num(literal)
     return literal
 def _process_literal(type_, literal):
     if type_ == 'string':
         return actions._get_as_str(literal)
     elif type_ == 'num':
         return actions._get_as_num(literal)
     return literal
 def _process_literal(type_, literal):
     if type_ == "string":
         return actions._get_as_str(literal)
     elif type_ == "num":
         return actions._get_as_num(literal)
     return literal
 def _process_literal(type_, literal):
     if type_ == "string":
         return actions._get_as_str(literal)
     elif type_ == "num":
         return actions._get_as_num(literal)
     return literal