Something black, white, which prints, and is read all over
Brian Rice
water at tunes.org
Wed Mar 23 13:43:25 PST 2005
Cool, thanks! I'll clean this up and incorporate it.
On Mar 23, 2005, at 1:37 PM, Lyndon Tremblay wrote:
> Here is some code. It is not meant for anything beyond a proof, so,
> unpolished. But I will go with commercialism and send this little
> bytecode
> printer:
>
> Use:
>
> "printMethod: [inform: 'test']."
>
> Will "print" the contents of the block. Uses code from mobius/?.slate
> (decodeImmediate)
>
> -lyndon
>
> ---------
>
> lobby addPrototype: #Interpreter derivedFrom: {Cloneable}.
> Interpreter addSlot: #codePosition valued: Nil.
> Interpreter addSlot: #codeSize valued: Nil.
> Interpreter addSlot: #method valued: Nil.
>
> i@(Interpreter traits) newWithMethod: method@(CompiledMethod traits)
> [
> i clone `>> [ method: method. codeSize: method code size.
> codePosition:
> 0. ]
> ].
>
> i@(Interpreter traits) decodeImmediate
> [| n code val |
> n: i codePosition.
> code: (i method code at: n).
> val: (code bitAnd: 16r7F).
> [code >= 16r80]
> whileTrue:
> [n: n + 1.
> code: (i method code at: n).
> val: (val << 7 bitOr: (code bitAnd: 16r7F))].
> i codePosition: n + 1.
> val
> ].
>
> i@(Interpreter traits) print
> [| op val |
> Console ; 'code size: ' ; i codeSize print ; '\n'.
> [i codePosition < i codeSize] whileTrue:
> [
> op: (i method code at: i codePosition).
> i codePosition: i codePosition + 1.
> val: op >> 4.
> val = 16rF ifTrue: [ val: i decodeImmediate ].
>
> Console ; i codePosition print ; ': <' ; op print ; '> \t'.
>
> (op bitAnd: 16r0F) caseOf: {
> 0 -> [Console ; 'sendmsg (' ; val print ; ')'].
> 1 -> [Console ; 'load var ' ; val print].
> 2 -> [Console ; 'stor var ' ; val print].
> 3 -> [Console ; 'load free ' ; val print].
> 4 -> [Console ; 'stor free ' ; val print].
> 5 -> [Console ; 'load lit ' ; (i method literals at: val) print].
> 6 -> [Console ; 'load sel ' ; (i method selectors at: val) print].
> 7 -> [Console ; 'pop' ; val print].
> 8 -> [Console ; 'new array' ; val print].
> 9 -> [Console ; 'new block' ; val print].
> 10 -> [Console ; 'branchkey' ; val print].
> 11 -> [Console ; 'sendmsg& ' ; val print].
> 12 -> [Console ; 'returnf ' ; val print].
> 13 -> [Console ; 'push int' ; val print].
> 14 -> [Console ; '(ext ' ; op print ; ')'].
> }.
>
> Console ; '\n'.
> "i returnFrom: 0."
> ].
> ].
>
> h@(lobby traits) printMethod: method@(CompiledMethod traits)
> [
> (h Interpreter newWithMethod: method) print
> ].
>
>
--
Brian T. Rice
LOGOS Research and Development
http://tunes.org/~water/
More information about the Slate
mailing list