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