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
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
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
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
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
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
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
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
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
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