2014-10-16 17:40 GMT+02:00 Marcus Denker <[email protected]>: > >> > >> While in the write we need to mark: > >> > >> lookupVariableForWrite: aVariableNode > >> > >> | var | > >> > >> var := scope lookupVar: aVariableNode name. > >> > >> var ifNil: [^var]. > >> var isSpecialVariable ifTrue: [ self storeIntoSpecialVariable: > aVariableNode ]. > >> var isWritable ifFalse: [ self storeIntoReadOnlyVariable: > aVariableNode ]. > >> > >> var isTemp ifTrue: [ > >> "when in a loop, all writes escape" > >> scope outerScope isInsideOptimizedLoop ifTrue: [ var > markEscapingWrite ]. > >> "else only escaping when they will end up in different > closures" > >> (var scope outerNotOptimizedScope ~= scope > outerNotOptimizedScope) > >> ifTrue: [ var markEscapingWrite]]. > >> ^var > >> > >> > >> I checked that all Opal tests that are failing are actually testing > wrong, and I double checked > >> that all those methods are now compiled like with the old old compiler… > >> Now recompilng the image. > > > > Hmm… nope…. something wrong. > > > > the “outerScope” was wrong. > > So without that, I can recompile the image and your example is compiled > without temp vectors… > > Marcus >
good! I'll open an issue on fogbugz and create a slice with your changes. about reordering of tempvars: It would be nice if the order preserves, but I think we can live with it. Although there is an issue with the debugger: 14058 <https://pharo.fogbugz.com/default.asp?14058> Inconsistent information in debugger I solved that one by using tempvar names instead if the index, but this has another issue (sometimes the last (or most nested) tempvar is always nil). The real error is, EyeDebuggerContextInspector does recognizes if the index changes (somewhere in EyeDebuggerContextInspector>>#updateList it compares the new elements (with new indices) with the old elements list and skips the update)
