I should say that I LOVVVVVVVEEEEE the comments in the method.
Yes Yes Yes.

Stef

> 
> Yes, just the AST with Semantic Analysis information (Scope and Semantic 
> Variables), plus
> bytecodelevel IR that provides the bridge to the low-level pc (bytecode 
> mapping) data…
> 
> e.g. to get the highlight in the debugger, this is now just this in 
> DebuggerMethodMapOpal:
> 
> 
> rangeForPC: aPC contextIsActiveContext: contextIsActive
>       "return the debug highlight for aPC"
>       | pc |
>       
>       "When on the top of the stack the pc is pointing to right instruction, 
> but deeper in the stack
>       the pc was already advanced one bytecode, so we need to go back this 
> one bytecode, which
>       can consist of multiple bytes. But on IR, we record the *last* bytecode 
> offset as the offset of the
>       IR instruction, which means we can just go back one"
> 
>       pc := contextIsActive ifTrue: [aPC] ifFalse: [aPC - 1].
>       ^(methodNode ir instructionForPC:  pc) sourceNode debugHighlightRange
> 
> 
> 
> more helper methods will simplify this even more, e.g. we should have a method
> on RBMethodNode like #nodeForPC: 
> 
> 
> rangeForPC: aPC contextIsActiveContext: contextIsActive
>       "return the debug highlight for aPC"
>       | pc |
>       
>       "When on the top of the stack the pc is pointing to right instruction, 
> but deeper in the stack
>       the pc was already advanced one bytecode, so we need to go back this 
> one bytecode, which
>       can consist of multiple bytes. But on IR, we record the *last* bytecode 
> offset as the offset of the
>       IR instruction, which means we can just go back one"
> 
>       pc := contextIsActive ifTrue: [aPC] ifFalse: [aPC - 1].
>       ^(methodNode nodeForPC:  pc) debugHighlightRange
> 
> 
> And this method one then can just implement on MethodContext itself.
> (Caching is handled by ASTCache).
> 
>       Marcus
> 
> 
> 


Reply via email to