Пример #1
0
    def wrap():
        traverser.function_collection.append([])
        traverser._debug("THIS_PUSH")
        # Allow references to "this"
        traverser.this_stack.append(JSObject(traverser=traverser))

        # inherit contexts from the current scope
        traverser.contexts = current_contexts

        params = {}
        for param in node["params"]:
            if param["type"] == "Identifier":
                params[param["name"]] = lambda: JSObject(traverser=traverser)
            else:
                # TODO: Support array and object destructuring.
                pass
        context = JSContext(data=params, traverser=traverser)
        traverser.contexts.append(context)

        traverser.traverse_node(node["body"])

        # Call all of the function collection's members to traverse all of the
        # child functions.
        func_coll = traverser.function_collection.pop()
        for func in func_coll:
            func()

        traverser.contexts.pop()
        # Since we need to manually manage the "this" stack, pop off that
        # context.
        traverser._debug("THIS_POP")
        traverser.this_stack.pop()
Пример #2
0
def _define_with(traverser, node):
    'Handles `with` statements'

    object_ = traverser._traverse_node(node['object'])
    if isinstance(object_, JSWrapper) and isinstance(object_.value, JSObject):
        traverser.contexts[-1] = object_.value
        traverser.contexts.append(JSContext('block'))
    return
Пример #3
0
def BlockStatement(traverser, node):
    traverser.contexts.append(JSContext("block", traverser=traverser))
    for child in node["body"]:
        traverser.traverse_node(child)
    traverser.contexts.pop()
    return False