> “get a copy of the IR tree"
> irMethod := (TestMy>>#test) ir copy.
> 
> “get all instance variable access IR instructions”
> allIvarAccesses :=  irMethod allInstructionsMatching: [ :ir |ir 
> isInstVarAccess].
> 
> “insert code for “1 halt” before all of them"
> allIvarAccesses do: [ :each | each  addInstructionsBefore: {  IRInstruction 
> pushLiteral: 1.  IRInstruction send:  #halt. IRInstruction popTop }].
> 
> “generate a new compiledMethod"
> cm := irMethod generate:  (TestMy>>#test) trailer.
> 
> “install in the class"
> TestMy addSelector: #test withMethod: cm.
> 
> 17 <76> pushConstant: 1
> 18 <D0> send: halt
> 19 <87> pop
> 20 <00> pushRcvr: 0
> 21 <76> pushConstant: 1
> 22 <B0> send: +
> 23 <76> pushConstant: 1
> 24 <D0> send: halt
> 25 <87> pop
> 26 <00> pushRcvr: 0
> 27 <B0> send: +
> 28 <7C> returnTop
> 
> 
> —> TestMy new test
> 
> What is now yet wiring is quick return methods —> need to clear the primitive 
> in that case, should not be hard to do.

I love this in 5 lines!!!!


Reply via email to