On May 15, 2013, at 3:41 PM, Clément Bera <clement.bera@inria.fr> wrote:
Sorry with the strike and no metro I cannot be at INRIA today. I'm at Marcus right now we will have a look at your slice now :)
So we looked⦠and there is a problem with readWith: anInterpreter inNode: aVariableNode self isArg ifTrue: [ | definingScope argIndex | definingScope := aVariableNode scope lookupScopeForVar: aVariableNode name. argIndex := definingScope node argumentNames indexOf: name. ^ anInterpreter readArgumentAt: argIndex node: aVariableNode ]. "If it is not an arg, it is a normal temporary" ^ anInterpreter readTemporaryAt: -1 named: name When generating byte code with closures the way they are implemented (with escaping variables allocated in Arrays on the heap), we can not assign any meaningful index to temps. (there is an index ivar, but this needs to be cleaned up). Now temps and args are modelled the same, but all kinds indexes that you could calculate are meaningless. Especially argIndex := definingScope node argumentNames indexOf: name. does not need to be consistent with the actual position of the arg⦠in edge cases. So we need to think about this⦠maybe introducing a OCArgVariable (with index) is the only way to do it. Marcus