Beispiel #1
0
def filter_ast(ast):
    # Add unmatching PositionalFormalParameter
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    func_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(func_stmt, 'EagerFunctionDeclaration')

    func_contents = utils.get_field(func_stmt, 'contents')
    utils.assert_interface(func_contents, 'FunctionOrMethodContents')

    params = utils.get_field(func_contents, 'params')
    utils.assert_interface(params, 'FormalParameters')
    params_items = utils.get_field(params, 'items')

    param = utils.get_element(params_items, 0)
    utils.assert_interface(param, 'BindingIdentifier')

    copied_param = utils.copy_tagged_tuple(param)

    name = utils.get_field(copied_param, "name")
    utils.set_identifier_name(name, "b")

    utils.append_element(params_items, copied_param)

    return ast
Beispiel #2
0
def filter_ast(ast):
    # Put WTF-8 string into field name.
    # In multipart format, field name is not encoded into the file,
    # so this has no effect.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    expr_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(expr_stmt, 'ExpressionStatement')

    field = utils.get_field(expr_stmt, 'expression')

    utils.append_field(expr_stmt, u'\uD83E_\uDD9D', field)
    utils.remove_field(expr_stmt, 'expression')

    return ast
Beispiel #3
0
def filter_ast(ast):
    # Put WTF-8 string into scope name.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')

    scope = utils.get_field(ast, 'scope')
    utils.assert_interface(scope, 'AssertedScriptGlobalScope')

    names = utils.get_field(scope, 'declaredNames')

    decl_name = utils.get_element(names, 0)
    utils.assert_interface(decl_name, 'AssertedDeclaredName')

    name = utils.get_field(decl_name, 'name')
    utils.set_identifier_name(name, u'\uD83E_\uDD9D')

    return ast
def filter_ast(ast):
    # Put WTF-8 string into identifier name.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    expr_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(expr_stmt, 'ExpressionStatement')

    assign_expr = utils.get_field(expr_stmt, 'expression')
    utils.assert_interface(assign_expr, 'AssignmentExpression')

    binding = utils.get_field(assign_expr, 'binding')
    utils.assert_interface(binding, 'AssignmentTargetIdentifier')

    name = utils.get_field(binding, 'name')
    utils.set_identifier_name(name, u'\uD83E_\uDD9D')

    return ast
def filter_ast(ast):
    # Move a continue statement out of a while loop.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    while_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(while_stmt, 'WhileStatement')

    while_body = utils.get_field(while_stmt, 'body')
    utils.assert_interface(while_body, 'Block')
    while_body_stmts = utils.get_field(while_body, 'statements')

    continue_stmt = utils.get_element(while_body_stmts, 0)
    utils.assert_interface(continue_stmt, 'ContinueStatement')

    utils.remove_element(while_body_stmts, 0)
    utils.append_element(global_stmts, continue_stmt)

    return ast
def filter_ast(ast):
    # Move function inside then-block, without fixing scope.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    fun_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(fun_stmt, 'EagerFunctionDeclaration')

    if_stmt = utils.get_element(global_stmts, 1)
    utils.assert_interface(if_stmt, 'IfStatement')

    block_stmt = utils.get_field(if_stmt, 'consequent')
    utils.assert_interface(block_stmt, 'Block')

    block_stmts = utils.get_field(block_stmt, 'statements')

    utils.append_element(block_stmts, utils.copy_tagged_tuple(fun_stmt))

    return ast
Beispiel #7
0
def filter_ast(ast):
    # Duplicate parameter up to 65536 entries.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    func_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(func_stmt, 'EagerFunctionDeclaration')

    func_contents = utils.get_field(func_stmt, 'contents')
    utils.assert_interface(func_contents, 'FunctionOrMethodContents')

    param_scope = utils.get_field(func_contents, 'parameterScope')
    utils.assert_interface(param_scope, 'AssertedParameterScope')
    param_names = utils.get_field(param_scope, 'paramNames')

    param_name = utils.get_element(param_names, 0)
    utils.assert_interface(param_name, 'AssertedPositionalParameterName')

    for i in range(1, 65536 + 1):
        copied_param_name = utils.copy_tagged_tuple(param_name)
        index = utils.get_field(copied_param_name, "index")
        name = utils.get_field(copied_param_name, "name")

        utils.set_unsigned_long(index, i)
        utils.set_identifier_name(name, "a{}".format(i))

        utils.append_element(param_names, copied_param_name)

    return ast
def filter_ast(ast):
    # Put WTF-8 string into interface name.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    expr_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(expr_stmt, 'ExpressionStatement')

    utils.set_interface_name(expr_stmt, u'\uD83E_\uDD9D')

    return ast
Beispiel #9
0
def filter_ast(ast):
    # Move a break statement out of a while loop.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    labelled_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(labelled_stmt, 'LabelledStatement')

    while_stmt = utils.get_field(labelled_stmt, 'body')
    utils.assert_interface(while_stmt, 'WhileStatement')

    while_body = utils.get_field(while_stmt, 'body')
    utils.assert_interface(while_body, 'Block')
    while_body_stmts = utils.get_field(while_body, 'statements')

    break_stmt = utils.get_element(while_body_stmts, 0)
    utils.assert_interface(break_stmt, 'BreakStatement')

    utils.remove_element(while_body_stmts, 0)
    utils.append_element(global_stmts, break_stmt)

    return ast
def filter_ast(ast):
    # Set different parameter name than one in scope.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    func_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(func_stmt, 'EagerFunctionDeclaration')

    func_contents = utils.get_field(func_stmt, 'contents')
    utils.assert_interface(func_contents, 'FunctionOrMethodContents')

    params = utils.get_field(func_contents, 'params')
    utils.assert_interface(params, 'FormalParameters')
    params_items = utils.get_field(params, 'items')

    param = utils.get_element(params_items, 0)
    utils.assert_interface(param, 'BindingIdentifier')

    name = utils.get_field(param, "name")
    utils.set_identifier_name(name, "b")

    return ast
def filter_ast(ast):
    # 2 AssertedPositionalParameterName with same index.
    import filter_utils as utils

    utils.assert_interface(ast, 'Script')
    global_stmts = utils.get_field(ast, 'statements')

    func_stmt = utils.get_element(global_stmts, 0)
    utils.assert_interface(func_stmt, 'EagerFunctionDeclaration')

    func_contents = utils.get_field(func_stmt, 'contents')
    utils.assert_interface(func_contents, 'FunctionOrMethodContents')

    param_scope = utils.get_field(func_contents, 'parameterScope')
    utils.assert_interface(param_scope, 'AssertedParameterScope')
    param_names = utils.get_field(param_scope, 'paramNames')

    param_name = utils.get_element(param_names, 1)
    utils.assert_interface(param_name, 'AssertedPositionalParameterName')

    index = utils.get_field(param_name, "index")
    utils.set_unsigned_long(index, 0)

    return ast