file: 15-C-debugger.t package: debug status: tentative
This function accepts a compiledFunction
and lists a human-readable disassembly of it
to the given stream. It is intended
to be invoked by (for example) a debugger.
Note that the Muq bytecode instruction set is not frozen, and should not be depended on to be the same in future releases. You have been warned!
stack: : x234 2 3.4 * ; stack: #'x234 @$s.standardOutput debug:disassembleCompiledFunction name: x234 source: 2 3.4 * constants: 0: 3.39999 code bytes: 00: 33 02 34 00 0e 2e code disassembly: 000: 33 02 GETi 2 002: 34 00 GETk 0 004: 0e MUL 005: 2e RETURN
It is currently implemented as:
: disassembleCompiledFunction { $ $ -> } -> s -> cfn
cfn isACompiledFunction
( Do a nice disassembly of a compiled function for human consumption: )
cfn$s.source -> fn
fn function? if
fn$s.name -> name
name string? if
"name: " s writeStream
name s writeStream
"\n" s writeStream
fi
fn$s.source -> src
src string? if
"source: " s writeStream
src s writeStream
"\n" s writeStream
fi
fi
"constants:\n" s writeStream
cfn compiledFunctionConstants[
|for v i do{
[ "%2d: " i | ]print s writeStream
v toDelimitedString s writeStream
"\n" s writeStream
}
]pop
"code bytes:" s writeStream
cfn compiledFunctionBytecodes[
|for v i do{
i 15 logand 0 = if [ "\n%02x: " i | ]print s writeStream fi
[ "%02x " v | ]print s writeStream
}
]pop
"\n" s writeStream
"code disassembly:\n" s writeStream
cfn compiledFunctionDisassembly s writeStream
;
Go to the first, previous, next, last section, table of contents.