예제 #1
0
def process(tree, id_):
    # refresh scopes to get a check-set
    tree = scopes.create_scopes(tree)
    check_set = tree.scope.all_var_names()
    check_set.update(lang.RESERVED.keys())

    # assuming a <file> or <block> node
    statementsNode = tree.getChild("statements")

    # create a map for strings to var names
    stringMap = search(statementsNode, verbose=False)
    if len(stringMap) == 0:
        return tree

    # apply the vars
    #stringList = sort(stringMap)
    replace(statementsNode, stringMap, check_set)

    # create a 'var' decl for the string vars
    stringReplacement = replacement(stringMap)
    repl_tree = treeutil.compileString(stringReplacement, id_ + "||stringopt")

    # ensure a wrapping closure
    closure, closure_block = treeutil.ensureClosureWrapper(statementsNode.children)
    statementsNode.removeAllChildren()
    statementsNode.addChild(closure)

    # add 'var' decl to closure
    closure_block.addChild(repl_tree, 0)  # 'var ...'; decl to front of statement list

    return tree
예제 #2
0
def process(tree, id_):
    # refresh scopes to get a check-set
    tree = scopes.create_scopes(tree)
    check_set = tree.scope.all_var_names()
    check_set.update(lang.RESERVED.keys())

    # assuming a <file> or <block> node
    statementsNode = tree.getChild("statements")

    # create a map for strings to var names
    stringMap = search(statementsNode)
    if len(stringMap) == 0:
        return tree

    # apply the vars
    #stringList = sort(stringMap)
    replace(statementsNode, stringMap, check_set)

    # create a 'var' decl for the string vars
    stringReplacement = replacement(stringMap)
    repl_tree = treeutil.compileString(stringReplacement, id_ + "||stringopt")

    # ensure a wrapping closure
    closure, closure_block = treeutil.ensureClosureWrapper(
        statementsNode.children)
    statementsNode.removeAllChildren()
    statementsNode.addChild(closure)

    # add 'var' decl to closure
    closure_block.addChild(repl_tree,
                           0)  # 'var ...'; decl to front of statement list

    return tree
예제 #3
0
def propagate_new_globals(node, new_symbols, globals_map):
    # make sure there is a wrapping closure
    node, closure_block = treeutil.ensureClosureWrapper(node)

    # add new statements at end
    for new_symbol in new_symbols:
        # construct statement
        stmt = "%s = %s;" % (globals_map[new_symbol], new_symbol)
        # compile to JS
        stmt_tree = treegenerator.parse(stmt)
        # attach to node tree
        closure_block.addChild(stmt_tree)  # does append by default
예제 #4
0
def propagate_new_globals(node, new_symbols, globals_map):
    #  assuming a container <node>, like <file> or <block>
    # make sure there is a wrapping closure
    stmtsNode = node.getChild("statements")
    new_node, closure_block = treeutil.ensureClosureWrapper(stmtsNode.children)
    stmtsNode.removeAllChildren()
    stmtsNode.addChild(new_node)

    # add new statements at end
    for new_symbol in new_symbols:
        # construct statement
        stmt = "%s = %s;" % (globals_map[new_symbol], new_symbol)
        # compile to JS
        stmt_tree = treegenerator.parse(stmt).getFirstChild()  # unwrap from 'statments' node
        # attach to node tree
        closure_block.addChild(stmt_tree)  # does append by default
    return node
def propagate_new_globals(node, new_symbols, globals_map):
    #  assuming a container <node>, like <file> or <block>
    # make sure there is a wrapping closure
    stmtsNode = node.getChild("statements")
    new_node, closure_block = treeutil.ensureClosureWrapper(stmtsNode.children)
    stmtsNode.removeAllChildren()
    stmtsNode.addChild(new_node)

    # add new statements at end
    for new_symbol in new_symbols:
        # construct statement
        stmt = "%s = %s;" % (globals_map[new_symbol], new_symbol)
        # compile to JS
        stmt_tree = treegenerator.parse(stmt).getFirstChild()  # unwrap from 'statments' node
        # attach to node tree
        closure_block.addChild(stmt_tree)  # does append by default
    return node