Exemplo n.º 1
0
def filter_ast(ast):
    # Put WTF-8 string into interface name.
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('ExpressionStatement') \
        .set_interface_name(u'\uD83E_\uDD9D')

    return ast
Exemplo n.º 2
0
def filter_ast(ast):
    # Put WTF-8 string into scope name.
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('scope') \
        .assert_interface('AssertedScriptGlobalScope') \
        .field('declaredNames') \
        .elem(0) \
        .assert_interface('AssertedDeclaredName') \
        .field('name') \
        .set_identifier_name(u'\uD83E_\uDD9D')

    return ast
def filter_ast(ast):
    # AssignmentTargetIdentifier with non-identifier string.
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('EagerFunctionDeclaration') \
        .field('name') \
        .assert_interface('BindingIdentifier') \
        .field('name') \
        .set_identifier_name('1')

    return ast
def filter_ast(ast):
    # Add unmatching PositionalFormalParameter
    import filter_utils as utils

    params_items = utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('EagerFunctionDeclaration') \
        .field('contents') \
        .assert_interface('FunctionOrMethodContents') \
        .field('params') \
        .assert_interface('FormalParameters') \
        .field('items')

    copied_param = params_items.elem(0) \
        .assert_interface('BindingIdentifier') \
        .copy()

    copied_param.field('name') \
        .set_identifier_name('b')

    params_items.append_elem(copied_param)

    return ast
Exemplo n.º 5
0
def filter_ast(ast):
    # Duplicate parameter up to 65536 entries.
    import filter_utils as utils

    param_names = utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('EagerFunctionDeclaration') \
        .field('contents') \
        .assert_interface('FunctionOrMethodContents') \
        .field('parameterScope') \
        .assert_interface('AssertedParameterScope') \
        .field('paramNames')

    param_name = param_names.elem(0) \
        .assert_interface('AssertedPositionalParameterName')

    for i in range(1, 65536 + 1):
        copied_param_name = param_name.copy()

        copied_param_name.field('index') \
            .set_unsigned_long(i)

        copied_param_name.field('name') \
            .set_identifier_name('a{}'.format(i))

        param_names.append_elem(copied_param_name)

    return ast
def filter_ast(ast):
    # catch with missing AssertedBoundName
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('TryCatchStatement') \
        .field('catchClause') \
        .assert_interface('CatchClause') \
        .field('bindingScope') \
        .assert_interface('AssertedBoundNamesScope') \
        .field('boundNames') \
        .remove_elem(0)

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

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('ExpressionStatement') \
        .field('expression') \
        .assert_interface('AssignmentExpression') \
        .field('binding') \
        .assert_interface('AssignmentTargetIdentifier') \
        .field('name') \
        .set_identifier_name(u'\uD83E_\uDD9D')

    return ast
def filter_ast(ast):
    # IdentifierExpression with non-identifier string.
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('ExpressionStatement') \
        .field('expression') \
        .assert_interface('AssignmentExpression') \
        .field('expression') \
        .assert_interface('IdentifierExpression') \
        .field('name') \
        .set_identifier_name('1')

    return ast
Exemplo n.º 9
0
def filter_ast(ast):
    # AssignmentTargetIdentifier with null string.
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('ExpressionStatement') \
        .field('expression') \
        .assert_interface('AssignmentExpression') \
        .field('binding') \
        .assert_interface('AssignmentTargetIdentifier') \
        .field('name') \
        .set_null_identifier_name()

    return ast
Exemplo n.º 10
0
def filter_ast(ast):
    # AssertedPositionalParameterName.index >= ARGNO_LIMIT - 1.
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('EagerFunctionDeclaration') \
        .field('contents') \
        .assert_interface('FunctionOrMethodContents') \
        .field('parameterScope') \
        .assert_interface('AssertedParameterScope') \
        .field('paramNames') \
        .elem(0) \
        .assert_interface('AssertedPositionalParameterName') \
        .field('index') \
        .set_unsigned_long(65536)

    return ast
Exemplo n.º 11
0
def filter_ast(ast):
    # AssertedPositionalParameterName with non-identifier string.
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('EagerFunctionDeclaration') \
        .field('contents') \
        .assert_interface('FunctionOrMethodContents') \
        .field('parameterScope') \
        .assert_interface('AssertedParameterScope') \
        .field('paramNames') \
        .elem(0) \
        .assert_interface('AssertedPositionalParameterName') \
        .field('name') \
        .set_identifier_name('1')

    return ast
Exemplo n.º 12
0
def filter_ast(ast):
    # AssertedBoundName with non-identifier string.
    import filter_utils as utils

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('TryCatchStatement') \
        .field('catchClause') \
        .assert_interface('CatchClause') \
        .field('bindingScope') \
        .assert_interface('AssertedBoundNamesScope') \
        .field('boundNames') \
        .elem(0) \
        .assert_interface('AssertedBoundName') \
        .field('name') \
        .set_identifier_name('1')

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

    utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('EagerFunctionDeclaration') \
        .field('contents') \
        .assert_interface('FunctionOrMethodContents') \
        .field('params') \
        .assert_interface('FormalParameters') \
        .field('items') \
        .elem(0) \
        .assert_interface('BindingIdentifier') \
        .field('name') \
        .set_identifier_name('b')

    return ast
Exemplo n.º 14
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

    expr_stmt = utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('ExpressionStatement') \

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

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

    global_stmts = utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements')

    continue_stmt = global_stmts.elem(0) \
        .assert_interface('WhileStatement') \
        .field('body') \
        .assert_interface('Block') \
        .field('statements') \
        .remove_elem(0) \
        .assert_interface('ContinueStatement')

    global_stmts.append_elem(continue_stmt)

    return ast
def filter_ast(ast):
    # AssertedDeclaredName with non-identifier string.
    import filter_utils as utils

    decl_names = utils.wrap(ast) \
        .assert_interface('Script') \
        .field('scope') \
        .assert_interface('AssertedScriptGlobalScope') \
        .field('declaredNames') \

    copied_decl_name = decl_names.elem(0) \
        .assert_interface('AssertedDeclaredName') \
        .copy()

    decl_names.append_elem(copied_decl_name)

    copied_decl_name.field('name') \
        .set_identifier_name('1')

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

    global_stmts = utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements')

    break_stmt = global_stmts.elem(0) \
        .assert_interface('LabelledStatement') \
        .field('body') \
        .assert_interface('WhileStatement') \
        .field('body') \
        .assert_interface('Block') \
        .field('statements') \
        .remove_elem(0) \
        .assert_interface('BreakStatement')

    global_stmts.append_elem(break_stmt)

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

    global_stmts = utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements')

    fun_decl = global_stmts \
        .elem(0) \
        .assert_interface('EagerFunctionDeclaration')

    global_stmts \
        .elem(1) \
        .assert_interface('IfStatement') \
        .field('consequent') \
        .assert_interface('Block') \
        .field('statements') \
        .append_elem(fun_decl.copy())

    return ast
Exemplo n.º 19
0
def filter_ast(ast):
    # BindingIdentifier with non-identifier string.
    import filter_utils as utils

    decls = utils.wrap(ast) \
        .assert_interface('Script') \
        .field('statements') \
        .elem(0) \
        .assert_interface('VariableDeclaration') \
        .field('declarators')

    copied_decl = decls.elem(0) \
        .assert_interface('VariableDeclarator') \
        .copy()

    decls.append_elem(copied_decl)

    copied_decl.field('binding') \
        .assert_interface('BindingIdentifier') \
        .field('name') \
        .set_identifier_name('1')

    return ast