@@ -26,13 +26,9 @@ public String buildStringGraph() {
2626 .append ("node [shape=plain fillcolor=\" #2A2A2A\" style=filled fontcolor=\" #12cc12\" fontname=\" Courier\" ]" ).append (System .lineSeparator ());
2727 for (BytecodeChunk bytecodeChunk : chunks .values ()) {
2828 String coloredNode = "" ;
29- OpcodeSource firstOpcode = bytecodeChunk .getOpcodes ().get (0 );
30- if (Main .arguments .onlyTraceOpcodes && !trace .containsKey (firstOpcode .getOffset ())) {
29+ if (Main .arguments .onlyTraceOpcodes && !chunkIsInTrace (bytecodeChunk )) {
3130 continue ;
3231 }
33- if (trace .containsKey (firstOpcode .getOffset ())) {
34- coloredNode = " fontcolor=\" red\" " ;
35- }
3632 sb .append (bytecodeChunk .getId ()).append ("[" ).append (coloredNode ).append ("label=" ).append (buildLabel (bytecodeChunk )).append ("]" ).append (System .lineSeparator ());
3733
3834 if (checkIfAppendBranch (bytecodeChunk .getBranchA ())) {
@@ -46,28 +42,58 @@ public String buildStringGraph() {
4642 return sb .toString ();
4743 }
4844
45+ private boolean chunkIsInTrace (BytecodeChunk chunk ) {
46+ for (OpcodeSource opcodeSource : chunk .getOpcodes ()) {
47+ if (trace .containsKey (opcodeSource .getOffset ())) {
48+ return true ;
49+ }
50+ }
51+ return false ;
52+ }
53+
4954 private boolean checkIfAppendBranch (BytecodeChunk branch ) {
5055 if (branch == null ) {
5156 return false ;
5257 }
5358 if (!Main .arguments .onlyTraceOpcodes ) {
5459 return true ;
5560 }
56- OpcodeSource firstOpcode = branch .getOpcodes ().get (0 );
57- return trace .containsKey (firstOpcode .getOffset ());
61+ return chunkIsInTrace (branch );
5862 }
5963
6064 private String buildLabel (BytecodeChunk bytecodeChunk ) {
6165 StringBuilder sb = new StringBuilder ("< <TABLE BORDER=\" 0\" CELLBORDER=\" 1\" CELLSPACING=\" 0\" CELLPADDING=\" 4\" >" ).append (System .lineSeparator ());
6266 for (OpcodeSource opcodeSource : bytecodeChunk .getOpcodes ()) {
67+ boolean isInTrace = trace .containsKey (opcodeSource .getOffset ());
68+
6369 String id = opcodeSource .getOffset () + "#" + opcodeSource .getBegin () + "#" + opcodeSource .getEnd ();
64- sb .append ("<TR><TD ID=\" " ).append (id ).append ("#offset#" ).append (contractName ).append ("\" HREF=\" \" >0x" )
65- .append (String .format ("%04X" , opcodeSource .getOffset ()))
66- .append ("</TD><TD ID=\" " ).append (id ).append ("#instr#" ).append (contractName ).append ("\" HREF=\" \" >" )
67- .append (opcodeSource .getOpcode ())
68- .append ("</TD>" );
70+ sb .append ("<TR><TD ID=\" " ).append (id ).append ("#offset#" ).append (contractName ).append ("\" HREF=\" \" >" );
71+ if (isInTrace ) {
72+ sb .append ("<font color=\" #ff1020\" >" );
73+ }
74+ sb .append ("0x" ).append (String .format ("%04X" , opcodeSource .getOffset ()));
75+ if (isInTrace ) {
76+ sb .append ("</font>" );
77+ }
78+ sb .append ("</TD><TD ID=\" " ).append (id ).append ("#instr#" ).append (contractName ).append ("\" HREF=\" \" >" );
79+ if (isInTrace ) {
80+ sb .append ("<font color=\" #ff1020\" >" );
81+ }
82+ sb .append (opcodeSource .getOpcode ());
83+ if (isInTrace ) {
84+ sb .append ("</font>" );
85+ }
86+ sb .append ("</TD>" );
6987 if (opcodeSource .getParameter () != null ) {
70- sb .append ("<TD>0x" ).append (opcodeSource .getParameter ().toString (16 )).append ("</TD>" );
88+ sb .append ("<TD>" );
89+ if (isInTrace ) {
90+ sb .append ("<font color=\" #ff1020\" >" );
91+ }
92+ sb .append ("0x" ).append (opcodeSource .getParameter ().toString (16 ));
93+ if (isInTrace ) {
94+ sb .append ("</font>" );
95+ }
96+ sb .append ("</TD>" );
7197 }
7298 sb .append ("</TR>" ).append (System .lineSeparator ());
7399 }
0 commit comments