root/NEWT0/trunk/misc/dumpFn

Revision 1, 1.5 kB (checked in by gnue, 4 years ago)

import project

Line 
1/*   NewtonScript function object dump for NTK */ /* ex. run on NTK:   dumpFn:dump("local foo := 1; bar := foo + 3");   "local foo := 1; bar := foo + 3" {instructions: "<#instructions: 0x24, 0xA3, 0x7B, 0x27, 0x00, 0x0C, 0xC0, 0xA8, 0x70, 0x02>",   literals: [literals: bar],   argFrame: {_nextArgFrame: NIL, _parent: NIL, _implementor: NIL, foo: NIL},   numArgs: 0,   DebuggerInfo: 2} run on NEWT/0:   DumpBC(<#instructions: 0x24, 0xA3, 0x7B, 0x27, 0x00, 0x0C, 0xC0, 0xA8, 0x70, 0x02>);      0 : 24                  push-constant (b =   4)      1 : a3                        set-var (b =   3)      2 : 7b                        get-var (b =   3)      3 : 27 00 0c            push-constant (b =  12)      6 : c0                            add               7 : a8               find-and-set-var (b =   0)      8 : 70                       find-var (b =   0)      9 : 02                         return          */ dumpFn := {     hexstr: func(v)     begin         local h := "0123456789ABCDEF";         local s;         s := h[v >> 4];         s := s & h[band(v, 0x0F)];         "0x" & s;     end,     convert: func(fn)     begin         local b;         local s;         fn := clone(fn);         removeslot(fn, 'class);         for i := 0 to length(fn.instructions) - 1 do begin             b := extractByte(fn.instructions, i);             s := s && :hexstr(b) & ",";         end;         trimString(s);         setlength(s, length(s) - 1);         s := "<#instructions:" && s & ">";         fn.instructions := s;         return fn;     end,     dump: func(fnStr)     begin         local fn;         print(fnStr);         fn := compile(fnStr);         print(:convert(fn));     end };
Note: See TracBrowser for help on using the browser.