Class: Crokus::CFGOnlyPrinter

Inherits:
Visitor
  • Object
show all
Defined in:
lib/crokus/cfg_printer_only.rb

Direct Known Subclasses

CFGOnlyPrinterDot, CFGOnlyPrinterJson

Constant Summary

Constants included from Indent

Indent::INDENT

Instance Method Summary collapse

Methods inherited from Visitor

#initialize, #visit, #visitAddressOf, #visitArrayOf, #visitArrayOrStructInit, #visitArrow, #visitAssign, #visitBinary, #visitBody, #visitBreak, #visitCase, #visitCastedExpr, #visitCasting, #visitCharLit, #visitCommaStmt, #visitCondExpr, #visitContinue, #visitDecl, #visitDefine, #visitDeref, #visitDesignUnit, #visitDoWhile, #visitFloatLit, #visitFor, #visitFormalArg, #visitFunCall, #visitFunctionProto, #visitGoto, #visitIdent, #visitIf, #visitInclude, #visitIndexed, #visitIntLit, #visitLabelledStmt, #visitParenth, #visitPointed, #visitPointerTo, #visitPostFixAccu, #visitPreFixAccu, #visitReturn, #visitSizeof, #visitStrLit, #visitStruct, #visitSwitch, #visitToken, #visitType, #visitTypedef, #visitUnary, #visitWhile

Methods included from Indent

#dedent, #indent, #say

Constructor Details

This class inherits a constructor from Crokus::Visitor

Instance Method Details

#dump(cfg) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/crokus/cfg_printer_only.rb', line 14

def dump cfg
  @visited=[]
  @code=Code.new
  header
  visit_rec(cfg.starter)
  footer
  return @code
end

#visitFunction(func, format) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/crokus/cfg_printer_only.rb', line 5

def visitFunction func,format
  puts " "*1+"|--[+] print CFG for '#{func.name}'"
  ir_code=dump(func.cfg)
  format=ir_code.lines.first.start_with?("digraph") ? "dot" : "json"
  filename=func.name.to_s+".#{format}"
  ir_code.save_as filename
  puts " "*5+"|--[+] generated #{filename}"
end