On Jul 16, 2013, at 4:10 PM, Udo Schneider <[email protected]> wrote:
> All,
>
> is there a supported interface to generate methods (incl. their bytecodes)
> manually?
>
In 3.0 we have two nice additions:
1) you can easily create CompiledMethods from RB ASTs
| cm methodNode |
methodNode := RBMethodNode
selector: #test
body: (RBReturnNode value: (RBLiteralNode value: 1)) asSequenceNode.
methodNode doSemanticAnalysis.
cm := methodNode generate.
cm valueWithReceiver: nil arguments: #()
2) For low level stuff there is IRBuilder. IR is a bytecode-level representation
(CFG) that abstracts away from the details yet is very close.
| cm |
cm := IRBuilder buildMethod: [ : builder |
builder pushLiteral: 3;
pushDup;
send: #=;
returnTop].
cm valueWithReceiver: nil arguments: #()