Hi,

I've just finished to implement a "test" program for PCode analysis. It is capable to test PCode for correct structure (e.g., there is no jumps into string content) and also to find assigned but unused local variables.

I've implemented it as independent code. It reads and analyses .hrb files, but "assigned but unused" detection can be included into compiler. The problem is that on PCode analysis stage local names are unknown, so, you'll see "Local 1" instead of "nCount". Offsets are PCode offsets from start of the function, I've also included line numbers, but I'm not sure it is always correct (not tested).

It was nice to run it on my code and also on Harbour core (not contribs) .prg files. Results are below. There are two standard warnings: 1) "CLASS ..." generates "nScope := 1", but if programmer provides scope for first defined data, this "nScope := 1" is redundant. 2) "METHOD ... CLASS ..." generates "LOCAL Self := QSELF()". If "Self" is unused, this assignment and local variable are redundant. Do not forget to count this local when counting locals of methods!

Also forcing garbage collection by "oBigObject := NIL" can force warning. The rest warnings was real and I've fixed it in my code.

I'm also happy to find a tiny dead pcode, see __DBGACHOICE.

If someone want to try on your own .prg (compile it to .hrb), you can find download on http://www.dbtopas.lt/hrb/pcoder.zip


Best regards,
Mindaugas



achoice.hrb
ACHOICE: Local 4 assigned at offset 9 (line 28) but unused
ACHOICE: Local 6 assigned at offset 15 (line 30) but unused
ACHOICE: Local 9 assigned at offset 27 (line 33) but unused
ACHOICE: Local 10 assigned at offset 33 (line 34) but unused
ACHOICE: Local 11 assigned at offset 39 (line 35) but unused
ACHOICE: Local 13 assigned at offset 51 (line 37) but unused
ACHOICE: Local 15 assigned at offset 57 (line 40) but unused
browse.hrb
BROWSE: Local 3 assigned at offset 33 (line 69) but unused
checkbox.hrb
HBCHECKBOX: Local 1 assigned at offset 33 (line 69) but unused
CHECKBOX_TYPEOUT: Local 1 assigned at offset 7 (line 327) but unused
dbgbrwsr.hrb
HBDBCOLUMN: Local 1 assigned at offset 33 (line 247) but unused
dbgtarr.hrb
HBDBARRAY_DOGET: Local 1 assigned at offset 7 (line 158) but unused
dbgthsh.hrb
HBDBHASH_DOGET: Local 1 assigned at offset 7 (line 163) but unused
dbgtinp.hrb
HBDBINPUT: Local 1 assigned at offset 33 (line 64) but unused
dbgtmenu.hrb
HBDBMENU_NEW: Local 2 assigned at offset 13 (line 113) but unused
dbgtobj.hrb
HBDBOBJECT_SETSKEYPRESSED: Local 3 assigned at offset 31 (line 213) but unused
debugger.hrb
HBDEBUGGER_EDITVAR: Local 3 assigned at offset 42 (line 1136) but unused
HBDEBUGGER_EDITVAR: Local 4 assigned at offset 60 (line 1137) but unused
HBDEBUGGER_LISTBOX: Local 9 assigned at offset 15 (line 1617) but unused
HBDEBUGGER_OPENPPO: Local 2 assigned at offset 13 (line 1925) but unused
HBDEBUGGER_OSSHELL: Local 1 assigned at offset 7 (line 1962) but unused
HBDEBUGGER_SHOWHELP: Local 1 assigned at offset 7 (line 2536) but unused
HBDEBUGGER_SHOWVARS: Local 2 assigned at offset 1665 (line 2635) but unused
HBDEBUGGER_VARGETVALUE: Local 1 assigned at offset 7 (line 2832) but unused
HBDEBUGGER_WATCHPOINTSSHOW: Local 2 assigned at offset 671 (line 3100) but unused
__DBGACHOICE: Dead PCode at 437
hscdx.hrb
HSX_OPEN: Local 2 assigned at offset 8 (line 174) but unused
listbox.hrb
HBLISTBOX: Local 1 assigned at offset 33 (line 76) but unused
LISTBOX_HITTEST: Local 4 assigned at offset 13 (line 424) but unused
profiler.hrb
HBPROFILEENTITY: Local 1 assigned at offset 33 (line 206) but unused
HBPROFILEENTITY_DESCRIBE: Local 1 assigned at offset 7 (line 242) but unused
HBPROFILEFUNCTION: Local 1 assigned at offset 33 (line 248) but unused
HBPROFILEFUNCTION_DESCRIBE: Local 1 assigned at offset 7 (line 258) but unused
HBPROFILEMETHOD: Local 1 assigned at offset 33 (line 264) but unused
HBPROFILEMETHOD_DESCRIBE: Local 1 assigned at offset 7 (line 274) but unused
HBPROFILEOPCODE: Local 1 assigned at offset 33 (line 280) but unused
HBPROFILEOPCODE_DESCRIBE: Local 1 assigned at offset 7 (line 290) but unused
HBPROFILE: Local 1 assigned at offset 33 (line 296) but unused
HBPROFILE_IGNORESYMBOL: Local 1 assigned at offset 7 (line 339) but unused
HBPROFILELOWLEVEL: Local 1 assigned at offset 33 (line 502) but unused
HBPROFILEREPORT: Local 1 assigned at offset 33 (line 548) but unused
HBPROFILEREPORT_HEADER: Local 1 assigned at offset 7 (line 584) but unused
HBPROFILEREPORT_LINE: Local 1 assigned at offset 7 (line 594) but unused
HBPROFILEREPORTTOFILE: Local 1 assigned at offset 33 (line 621) but unused
HBPROFILEREPORTTOARRAY: Local 1 assigned at offset 33 (line 664) but unused
HBPROFILEREPORTTOSTRING: Local 1 assigned at offset 33 (line 696) but unused
HBPROFILEREPORTTOTBROWSE: Local 1 assigned at offset 33 (line 716) but unused
pushbtn.hrb
HBPUSHBUTTON: Local 1 assigned at offset 33 (line 69) but unused
PUSHBUTTON_TYPEOUT: Local 1 assigned at offset 7 (line 330) but unused
radiobtn.hrb
HBRADIOBUTTON: Local 1 assigned at offset 33 (line 68) but unused
radiogrp.hrb
HBRADIOGROUP: Local 1 assigned at offset 33 (line 69) but unused
scrollbr.hrb
HBSCROLLBAR: Local 1 assigned at offset 33 (line 68) but unused
tbcolumn.hrb
TBCOLUMN: Local 1 assigned at offset 33 (line 66) but unused
tbrowse.hrb
TBROWSE: Local 1 assigned at offset 33 (line 118) but unused
TBROWSE_READRECORD: Local 4 assigned at offset 397 (line 657) but unused
TBROWSE_READRECORD: Local 4 assigned at offset 414 (line 659) but unused
TBROWSE_READRECORD: Local 4 assigned at offset 505 (line 665) but unused
TBROWSE_READRECORD: Local 5 assigned at offset 347 (line 655) but unused
TBROWSE_READRECORD: Local 5 assigned at offset 490 (line 664) but unused
TBROWSE_DOCONFIGURE: Local 6 assigned at offset 1028 (line 1424) but unused
_MBRWPOS: Local 4 assigned at offset 104 (line 2538) but unused
teditor.hrb
HBEDITOR: Local 1 assigned at offset 33 (line 63) but unused
TEXT2ARRAY: Local 1 assigned at offset 7 (line 1077) but unused
tget.hrb
GET: Local 1 assigned at offset 33 (line 78) but unused
GET_SETCOLORSPEC: Local 4 assigned at offset 77 (line 961) but unused
GET_SETCOLORSPEC: Local 4 assigned at offset 119 (line 961) but unused
GET_SETCOLORSPEC: Local 4 assigned at offset 161 (line 961) but unused
GET_PUTMASK: Local 7 assigned at offset 37 (line 1182) but unused
tgetlist.hrb
HBGETLIST: Local 1 assigned at offset 33 (line 88) but unused
HBGETLIST_GETAPPLYKEY: Local 4 assigned at offset 59 (line 342) but unused
HBGETLIST_GUIAPPLYKEY: Local 9 assigned at offset 41 (line 930) but unused
HBGETLIST_TBAPPLYKEY: Local 5 assigned at offset 554 (line 1269) but unused
HBGETLIST_TBAPPLYKEY: Local 7 assigned at offset 41 (line 1204) but unused
thfuncx.hrb
typefile.hrb
typefilx.hrb
tlabel.hrb
HBLABELFORM_LOADLABEL: Local 1 assigned at offset 7 (line 347) but unused
HBLABELFORM_LOADLABEL: Local 3 assigned at offset 13 (line 348) but unused
HBLABELFORM_LOADLABEL: Local 5 assigned at offset 32 (line 350) but unused
HBLABELFORM_LOADLABEL: Local 6 assigned at offset 38 (line 351) but unused
HBLABELFORM_LOADLABEL: Local 7 assigned at offset 44 (line 352) but unused
HBLABELFORM_LOADLABEL: Local 9 assigned at offset 57 (line 354) but unused
HBLABELFORM_LOADLABEL: Local 9 assigned at offset 829 (line 458) but unused
HBLABELFORM_LOADLABEL: Local 10 assigned at offset 65 (line 355) but unused
HBLABELFORM_LOADLABEL: Local 14 assigned at offset 71 (line 360) but unused
tmenuitm.hrb
HBMENUITEM: Local 1 assigned at offset 33 (line 63) but unused
tmenusys.hrb
HBMENUSYS: Local 1 assigned at offset 33 (line 71) but unused
HBMENUSYS_MODAL: Local 10 assigned at offset 2212 (line 365) but unused
HBMENUSYS_MODAL: Local 11 assigned at offset 2282 (line 371) but unused
tobject.hrb
tpersist.hrb
HBPERSISTENT_LOADFROMTEXT: Local 3 assigned at offset 318 (line 98) but unused HBPERSISTENT_LOADFROMTEXT: Local 3 assigned at offset 424 (line 104) but unused HBPERSISTENT_LOADFROMTEXT: Local 4 assigned at offset 346 (line 100) but unused
tpopup.hrb
HBPOPUPMENU: Local 1 assigned at offset 33 (line 69) but unused
treport.hrb
HBREPORTFORM_REPORTHEADER: Local 2 assigned at offset 13 (line 459) but unused HBREPORTFORM_EXECUTEREPORT: Local 7 assigned at offset 1011 (line 696) but unused HBREPORTFORM_LOADREPORTFILE: Local 4 assigned at offset 13 (line 878) but unused HBREPORTFORM_LOADREPORTFILE: Local 6 assigned at offset 39 (line 880) but unused HBREPORTFORM_LOADREPORTFILE: Local 7 assigned at offset 52 (line 881) but unused HBREPORTFORM_LOADREPORTFILE: Local 8 assigned at offset 58 (line 882) but unused HBREPORTFORM_LOADREPORTFILE: Local 12 assigned at offset 64 (line 886) but unused HBREPORTFORM_LOADREPORTFILE: Local 19 assigned at offset 80 (line 895) but unused
HBREPORTFORM_GETEXPR: Local 2 assigned at offset 13 (line 1146) but unused
HBREPORTFORM_GETEXPR: Local 3 assigned at offset 19 (line 1147) but unused
HBREPORTFORM_GETCOLUMN: Local 2 assigned at offset 13 (line 1278) but unused
HBREPORTFORM_GETCOLUMN: Local 3 assigned at offset 16 (line 1278) but unused
tscalar.hrb
SCALAROBJECT_ISSCALAR: Local 1 assigned at offset 7 (line 75) but unused
SCALAROBJECT_BECOMEERR: Local 1 assigned at offset 7 (line 105) but unused
ARRAY_ASSTRING: Local 1 assigned at offset 7 (line 148) but unused
ARRAY_ISSCALAR: Local 1 assigned at offset 7 (line 204) but unused
BLOCK_ASSTRING: Local 1 assigned at offset 7 (line 252) but unused
HASH_ASSTRING: Local 1 assigned at offset 7 (line 293) but unused
NIL_ASSTRING: Local 1 assigned at offset 7 (line 315) but unused
POINTER_ASSTRING: Local 1 assigned at offset 7 (line 348) but unused
tsymbol.hrb
SYMBOL: Local 1 assigned at offset 33 (line 55) but unused
tthreadx.hrb
SIGNAL: Local 1 assigned at offset 33 (line 70) but unused
THREAD: Local 1 assigned at offset 33 (line 105) but unused
TTHREAD_EXECUTE: Local 1 assigned at offset 7 (line 153) but unused
ttopbar.hrb
HBTOPBARMENU: Local 1 assigned at offset 33 (line 65) but unused
_______________________________________________
Harbour mailing list
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to