Exemplo n.º 1
0
def addScopeBreakDebug(node, outs = []):
    if node == None:
        return
    if nodeType(node) == 'If':
        outs[-1].pop()
        outs[-1].append(ASTModifier.makeScopeOutLog(node.coord))
        addScopeBreakDebug(node.iftrue, outs)
        addScopeBreakDebug(node.iffalse, outs)
    else:
        for (name, child) in node.children():
            if child == None:
                return
            elif (nodeType(child) == 'For' or
                nodeType(child) == 'While' or
                nodeType(child) == 'DoWhile'):
                    outs.append([ASTModifier.makeScopeOutLog(child.coord)])
                    addScopeBreakDebug(child.stmt, outs)
                    outs.pop()
            elif nodeType(child) == 'If':
                if len(outs) == 0:
                    outs.append([])
                outs[-1].append(ASTModifier.makeScopeOutLog(child.coord))
                addScopeBreakDebug(child.iftrue, outs)
                addScopeBreakDebug(child.iffalse, outs)
                outs[-1].pop()
            elif nodeType(child) == 'Break':
                addBreakDebug(node, [x[1] for x in node.children()].index(child), outs[-1])
            else:
                addScopeBreakDebug(child, outs)
Exemplo n.º 2
0
def addForDebug(parent, child, index):
    if nodeType(parent) != 'Compound':
        return
    preFor = [ASTModifier.makeScopeInLog(child.coord)]
    postFor = [ASTModifier.makeScopeOutLog(child.coord)]
    if nodeType(child.init) == 'DeclList':
        for (name, decl) in child.init.children():
            newDecl = ASTModifier.makeVarDecl(decl, decl.init)
            ASTModifier.addVar(decl)
            ASTModifier.addVar(newDecl)
            preFor.append(newDecl)
            preFor.append(ASTModifier.makeDeclLog(child.coord,
                                                getTypeName(getType(decl))))
            preFor.append(ASTModifier.makeAssignLog(child.coord,
                                                    getTypeName(getType(decl)),
                                                    getTypeName(getType(newDecl))))
            decl.init = ASTModifier.makeID(newDecl)
    else:
        child.init = makeAssignExprLog(child.init)
    child.cond = makeAssignExprLog(child.cond)
    child.next = makeAssignExprLog(child.next)
        
    parent.block_items = parent.block_items[:index] + \
                         preFor + \
                         [parent.block_items[index]] + \
                         postFor + \
                         parent.block_items[index + 1:]
Exemplo n.º 3
0
def addWhileDebug(parent, child, index):
    if nodeType(parent) != 'Compound':
        return
    child.cond = makeAssignExprLog(child.cond)
    parent.block_items = parent.block_items[:index] + \
                         [ASTModifier.makeScopeInLog(child.coord)] + \
                         [parent.block_items[index]] + \
                         [ASTModifier.makeScopeOutLog(child.coord)] + \
                         parent.block_items[index + 1:]
Exemplo n.º 4
0
def addIfDebug(parent, child, index):
    if nodeType(child.iftrue) == 'Compound':
        if child.iftrue.block_items == None:
            child.iftrue.block_items = [
                ASTModifier.makeScopeInLog(child.coord),
                ASTModifier.makeScopeOutLog(child.coord)]
        else:
            child.iftrue.block_items = [ASTModifier.makeScopeInLog(child.coord)] + \
                child.iftrue.block_items + \
                [ASTModifier.makeScopeOutLog(child.coord)]
    if nodeType(child.iffalse) == 'Compound':
        if child.iffalse.block_items == None:
            child.iffalse.block_items = [
                ASTModifier.makeScopeInLog(child.coord),
                ASTModifier.makeScopeOutLog(child.coord)]
        else:
            child.iffalse.block_items = [ASTModifier.makeScopeInLog(child.coord)] + \
                child.iffalse.block_items + \
                [ASTModifier.makeScopeOutLog(child.coord)]