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
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): # 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
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
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
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
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