(name 'Compiler-cwp.233' message 'Modifications to support fileIn.' id '08fb6d23-d292-4576-b669-83b7e113dfa0' date '20 June 2012' time '6:04:45.878 pm' author 'cwp' ancestors ((name 'Compiler-cwp.232' message 'Created CompilationContext and refactored Compiler, Parser and Encoder to use it, where applicable.' id 'f4317ad0-2063-424c-9b72-d577a1c24073' date '19 June 2012' time '2:17:17.217 pm' author 'cwp' ancestors ((name 'Compiler-eem.231' message 'Fix decompilation of inlined to:do: loops whose value is used
(e.g. ^55 to: 57 do: [:i| self]).  Avoid using the sugared checkBlock:as:
in the ifnil transformers that also use the unsugared checkBlock:as:maxArgs:' id 'd4dbfdb6-fea7-4583-b07a-e1e2fad7f090' date '15 May 2012' time '10:04:02.174 am' author 'eem' ancestors ((name 'Compiler-eem.230' message 'Add an exception handler to the emit phase of method
generation so that emitting too much code answers the
same error as emitting too little, instead of an ugly error
from the bowels of CompiledMethod class>>new:.' id '22de95f2-fdd6-41b0-8d2c-69fce3351216' date '8 May 2012' time '11:24:29.327 am' author 'eem' ancestors ((name 'Compiler-nice.229' message 'Add missing initialization in Decompiler>>decompileBlock:' id '1d6c6093-e2bb-4dce-92c0-3a4713132c54' date '22 April 2012' time '4:35:27.085 pm' author 'nice' ancestors ((name 'Compiler-eem.228' message 'Fix snafu in Compiler-eem.227 at: => at:ifAbsent:. in decompiler' id 'd35c5eea-e31b-440a-bc18-18a921444c4d' date '29 March 2012' time '3:53:13.947 pm' author 'eem' ancestors ((name 'Compiler-eem.227' message 'Hide the onceCache when decompiling.' id 'ba2dd2c9-e83b-48f2-877e-310826e49215' date '28 March 2012' time '6:34:18.679 pm' author 'eem' ancestors ((name 'Compiler-eem.226' message 'Fix bug in determining primitive error code offset (thanks Igor!)' id 'a6a82cc9-7f79-4c3b-a02c-5ba6ed476b05' date '20 March 2012' time '11:02:47.966 am' author 'eem' ancestors ((name 'Compiler-nice.225' message 'Remove the ugly hack in Parser>>expected: which was modifying the error message insertion mark depending on the fact that we were at end of token stream a,d/or end of source character stream.

Replace it with a proper mark in Scanner>>scanToken that correctly take into account the two step of advance handled by the Scanner (stateful is harmful and require high precision surgery).

While at it, set the error insertion mark after the $ character when offended by Scanner>>xDollar.

This efficiently reduce the number of failures reported by CompilerNotifyngTest in its Tests-nice.144 version.' id '77bbb3ac-e939-4975-a139-f785dc94c17a' date '22 February 2012' time '2:57:07.872 pm' author 'nice' ancestors ((name 'Compiler-nice.224' message 'Just for fun, fix http://code.google.com/p/pharo/issues/detail?id=4915
The inlined and non inlined versions of to:do: should answer the same result.

Implementation notes:
This happens to be the receiver of to:do:, and thus the initial value of the loop index.
So we can trivially
- push the value of init statement on the stack,
- remove the final nil that was pushed forValue,
- and leave the rest of code generation unchanged' id '15070f34-9c69-4407-a041-7659522fc95a' date '20 February 2012' time '10:56:20.223 pm' author 'nice' ancestors ((name 'Compiler-nice.223' message 'Correct a bug (see http://code.google.com/p/pharo/issues/detail?id=4650)

self should: [Compiler evaluate: ''$''] raise: Error.

I also simplified all the redundancy (aheadChar == DoItCharacter and: [source atEnd]) and replaced with aheadChar == DoItCharacter.
Indeed, these were uggly incomplete guards trying to distinguish a DoItCharacter marking an end of stream from a (Character value: 30 "ASCII character RS means Record Separator") encountered in source...
But they would not even handle the case when DoItCharacter is the last source character., except maybe the uggliest contorsions in xDigit...

Instead I replaced the DoItCharacter marking the endOfStream by a character that we should never encounter in source.
I have chosen 16r10FFFF which is the last unicode and will never be used to encode a character (as all ending in FFFE and FFFF).
A different strategy would be to use a value greater than the last unicode, like 16r110000, and would also work...
Or use a different Object. In this later case, the object would have to understand charCode or we would have to change more Scanner methods (at least typeTableAt:).

Note that with current Character implementation, (Character value: 16r10FFFF) ~~ (Character value: 16r10FFFF).
Since all tests are written with identity test aheadChar or hereChar == DoItCharacter, even if such Character were encountered in source, it wouldn''t be interpreted as an endOfStream mark, thus any Character code > 255 could have been used, but this would be more fragile.

Consequently, I also modified the character type table to not interpret (Character value: 30) as end of source (#doIt).
I think that it was previously possible to insert a (Character value: 30) in source, and everything after that would have been ignored (if not between quotes) and could potentially store meta information. But this was both undocumented and AFAIK unused. It''s easy to go back if we want to, by restoring previous version of #initializeTypeTable.

While doing this, I noticed that (Character value: 30) will now be interpreted as binary as many other characters including invisible control characters...
It could thus be used in a binary selector! That''s crazy and I suggest using xIllegal in the Character typeTable, since I had previously prepared this method...
But one change at a time...' id '8c21622a-6317-4c71-ad1a-607ba1683e6c' date '9 February 2012' time '4:05:21.21 pm' author 'nice' ancestors ((name 'Compiler-nice.222' message 'Correct a potential bug: there is no reason to initialize the Encoder literalStream with a ReadStream since it''s always used as a WriteStream.

I don''t have a test case for this, but Martin McClure encoutered some problems with this method in Pharo.' id '32e53e56-3fa4-46f0-9f90-59f92b3a19ba' date '20 November 2011' time '9:56:07.638 pm' author 'nice' ancestors ((name 'Compiler-ul.221' message 'Don''t leave an empty line after removing all unused temporary declarations.' id 'e7d854de-d6b7-da44-986c-0764cb7841f4' date '15 November 2011' time '3:52:35.902 pm' author 'ul' ancestors ((name 'Compiler-ul.220' message 'Integrated the Parser changes from http://bugs.squeak.org/view.php?id=7572 :

Change Set:		parser-lw
Date:			31 May 2011
Author:			Lars Wassermann

Changed the Parser to
	remove Block Local Temporaries
	ask even if there are no method local temporaries
	don''t ask several times for removal
	don''t recommend to remove temporaries which are assigned to' id '1afd47cf-c700-2f43-a87b-e46ee1bcba39' date '15 November 2011' time '4:25:41.558 am' author 'ul' ancestors ((name 'Compiler-nice.219' message 'Let a binary selector be composed of vertical bars.

Since st80, such selector were not composed at scan time because of ambiguity with empty temporaries spec || and latter with temporaries in a block of arity >0 like ^[:e|| tmp | tmp := e]
But a hack in the Parser did authorize a single #| as a valid binary.
Since
- we can unambiguously extend this hack easily,
- ANSI seems to tell it''s a valid binary character in a binary selector,
- I never saw any grammar definition explicitely forbidding this,
Let''s just do it.' id '871ffcae-841f-194e-ab14-0a7a493df385' date '24 October 2011' time '6:52:05.789 pm' author 'nice' ancestors ((name 'Compiler-nice.218' message 'Add a backward compatibility preference for allowing compilation of #, #. and other uni-character symbols.
This is necessary for loading some outdated packages.' id '32663b2d-f5b4-4d87-bd75-22732f1821c0' date '4 October 2011' time '9:16:03.441 pm' author 'nice' ancestors ((name 'Compiler-eem.217' message 'Add MethodNode>>ensureNotQuick to allow forcing generating
non-quick versions of quick methods (^self, ^inst var, et al).
This is used by MwbreakpointWrapper.
Yes this could arguably be a set of extensions in
MethodWrappers, but it feels too intimate for that, and
other compilers may want to implement the same API.' id '4b06bdff-bc34-4a41-b59d-8de0dc9bf16c' date '27 September 2011' time '3:51:31.614 pm' author 'eem' ancestors ((name 'Compiler-eem.216' message 'Use the methodForDecompile hook in decompile:in:.  This
fixes infinite recursion when decompiling installed wrapper
methods.  Needs Kernel-eem.630.' id '6876b6f4-047e-4ed9-81e6-9f49c02fcd00' date '27 September 2011' time '8:55:43.391 am' author 'eem' ancestors ((name 'Compiler-eem.215' message 'Compiler half of second part of changes to revive ability to
create subclasses of CompiledMethod.  Other half is
Kernel-eem.620.' id 'a4ef4332-f69b-4675-8896-723edb2cf487' date '15 September 2011' time '5:09:54.028 pm' author 'eem' ancestors ((name 'Compiler-eem.214' message 'Compiler half of first part of changes to revive ability to
create subclasses of CompiledMethod.  Other half is
Kernel-eem.619.' id '88e225e0-5e81-4d57-aadd-6b92a971fdd8' date '15 September 2011' time '4:30:28.005 pm' author 'eem' ancestors ((name 'Compiler-eem.213' message 'Help exotic compiler writers by pointing out that
bindBlockTemp: should not be used in BytecodeEncoder.' id '4168834b-c57f-477e-90ad-603e15b345c5' date '18 August 2011' time '5:45:08.905 pm' author 'eem' ancestors ((name 'Compiler-eem.212' message 'Add a useful validation check to the closure analysis.  Insist
that local variables have at most one defining scope.' id '7aa3630c-0547-4f85-821b-c1a9bb4dbbd5' date '18 August 2011' time '4:32:55.72 pm' author 'eem' ancestors ((name 'Compiler-eem.211' message 'Parse error: keyword in FFI pragmas/method tags.  Requires
FFI-Kernel-eem.24/FFI-Pools-eem.3.

Fix BlockLocalTempCounter for all-return case statements.

Make sure define class uses the non-meta-class.' id '500dbdbf-02ba-4414-a482-34f50dafbd38' date '8 July 2011' time '1:30:12.579 pm' author 'eem' ancestors ((name 'Compiler-ul.210' message '- Don''t send #forgetDoIts, because it''s not needed anymore.
- Use #repeat instead of [ true ] whileTrue and friends.' id '9a16e9f7-e6a8-b249-9040-08ab3346a640' date '17 June 2011' time '4:31:17.171 pm' author 'ul' ancestors ((name 'Compiler-ul.209' message 'Added the missing class variable AllowBlockArgumentAssignment.' id 'e3f8ac39-c1bb-7b43-ba44-8447113e2649' date '10 June 2011' time '11:10:15.285 pm' author 'ul' ancestors ((name 'Compiler-ul.208' message '- added a pragma preference for #allowBlockArgumentAssignment. Migration code is in the postscript.
- updated code using #allowBlockArgumentAssignment
- removed Parser class >> #initialize which just installed now obsolete preferences' id '2bc142b2-8022-8d40-b4ca-f0bc566738ed' date '10 June 2011' time '11:00:02.811 pm' author 'ul' ancestors ((name 'Compiler-nice.207' message 'Oops, use #canDeclareInstanceVariable where due.
This message was created on purpose, and has no reason to remain unsent.' id '592f6683-4ee7-483c-b723-50ba8fc53afb' date '20 April 2011' time '2:18:01.027 am' author 'nice' ancestors ((name 'Compiler-ul.206' message '- fixed Scanner''s comment
- removed unsent obsolete method from Scanner
- refactored Scanner >> #scanLitWord a bit
- changed the postscript to recompile the senders of #repeat, just in case someone has broken methods' id '8cf4ce89-32f6-f04c-bbd5-8cb82cce271f' date '3 April 2011' time '2:18:08.993 am' author 'ul' ancestors ((name 'Compiler-nice.205' message 'Don''t forget to deoptimize the receiver of an optimized message in case of cascade.' id '1ff62b57-d6e2-43b6-8827-db4113196b24' date '2 April 2011' time '7:27:35.803 pm' author 'nice' ancestors ((name 'Compiler-ul.204' message 'Scanner changes:
- added a new class variable DoItCharacter. All checks for doIt characters (30) should use this. (part 2)
- reuse buffer in #xDoubleQuote instead of a custom stream' id '9a4461b2-a9c8-1a4e-82bc-40d15ff7ac7c' date '2 April 2011' time '12:53:54.869 am' author 'ul' ancestors ((name 'Compiler-ul.203' message 'Scanner changes:
- introduced #character type for characters instead of #number (part 2)
- updated comment
- added a new class variable DoItCharacter. All checks for doIt characters (30) should use this. (part 1)
- moved TypeTable initialization to a separate method
- instance creation uses the common #initialize method instead of #initScanner
- removed #initScanner and the class side #new
- use #== instead of #= for symbol and character comparison
- use #repeat instead of true and #whileTrue for loops
- use #and: instead of #&' id '9817f32d-943f-4745-81b8-0ecaeec259d4' date '2 April 2011' time '12:50:39.599 am' author 'ul' ancestors ((name 'Compiler-ul.202' message '- reject literals with superfluous # at the beginning, like #$a #123 ##foo ##(1 2 3), etc
- introduced #character type for characters instead of #number (part 1)' id 'e7e9151c-c2e9-b14a-bb57-68e6ea8daea5' date '2 April 2011' time '12:44:12.796 am' author 'ul' ancestors ((name 'Compiler-nice.201' message 'Put optimized selectors in CompiledMethod literals so that senders can be browsed normally.
Take care to not overflow the scarse literal ressource.

It is necessary to evaluate (Compiler recompileAll) before succesfully browsing senders of #ifNil:

Thanks to Marcus at http://code.google.com/p/pharo/issues/detail?id=2559 for the idea.' id 'd694a5f8-4d75-2f4d-a06d-4c5de7fe1656' date '31 March 2011' time '12:45:32.697 am' author 'nice' ancestors ((name 'Compiler-nice.200' message 'minor ifNil refactoring' id 'e97c15bd-d6b0-b648-9bde-fb0e2ffde315' date '30 March 2011' time '10:47:39.106 pm' author 'nice' ancestors ((name 'Compiler-nice.199' message 'Use #newCompiler #newParser
Move some #evaluate: methods to instance side to enable (self class newCompiler evaluate: ''nil'') usage' id '40f46685-08e8-4661-95bd-8be4327c963b' date '30 March 2011' time '9:56:40.201 pm' author 'nice' ancestors ((name 'Compiler-IgorStasenko.198' message 'Wiped out the rest of positional arguments cruft' id 'bf3a5d4c-f59c-3946-b327-5d4df44ac340' date '25 March 2011' time '2:19:06.814999999 pm' author 'IgorStasenko' ancestors ((name 'Compiler-ar.197' message 'Remove left-over cruft for positional args in scanner.' id '6eb026eb-8e91-d844-b9c0-6dbe7997385a' date '25 March 2011' time '9:17:09.411 am' author 'ar' ancestors ((name 'Compiler-ul.196' message '- minor tweaks' id 'c6499e3d-db6c-704f-b00e-243584dd2543' date '15 March 2011' time '1:46:35.738 pm' author 'ul' ancestors ((name 'Compiler-ul.195' message '- use #== for character comparison, #asciiValue for value comparison.' id '330dc985-d425-1a44-bdda-e67bdb1df894' date '13 March 2011' time '8:50:34.098 pm' author 'ul' ancestors ((name 'Compiler-nice.194' message 'Fix cascading of special messages.

During inlining of some special messages, the MessageNode selector and/or arguments might be destructively replaced.
(for example #ifFalseifTrue: ifNil:ifNotNil: etc...)

If we later decide to un-optimize, it is necessary to restore the originalSelector and originalArguments.
(for example when these messages are cascaded)

Also fix a bug occuring when decompiling these cascaded specials.

Thanks to Juan for testing/enhancing this useless but beautiful stuff.

TODO: automate some tests.' id 'de6fad00-fa6c-4622-9c03-046113d7e4fe' date '4 March 2011' time '4:51:51.372 am' author 'nice' ancestors ((name 'Compiler-ul.193' message '- removed guarding clauses from MessageNode''s #checkBlock:as:from:maxArgs: and #transformCase:
- removed all implementations of #canBeSpecialArgument' id '2676a6c5-2140-814f-b508-e35126bd2c85' date '28 February 2011' time '7:27:29.293 am' author 'ul' ancestors ((name 'Compiler-nice.192' message 'Let #caseOf: accept any ParseNode argument, not just BraceNode and VariableNode.
Remove usage of canBeSpecialArgument which is now unsent.' id '3be37582-d3a2-4825-8210-073dd0af3f61' date '20 February 2011' time '5:12:00.371 pm' author 'nice' ancestors ((name 'Compiler-ul.191' message 'Restored VariableNode >> #canBeSpecialArgument, which got lost with Compiler-nice.188 for some unknown reason. It is required to compile #caseOf: with non-brace array arguments.' id 'a7628e80-ae41-e348-b9b0-6b5f475cd90b' date '19 February 2011' time '10:02:37.736 pm' author 'ul' ancestors ((name 'Compiler-ul.190' message '- changed the postscript to recompile all methods which send #repeat' id 'e4670946-be62-fd47-ab36-484978188552' date '13 February 2011' time '8:57:40.179 pm' author 'ul' ancestors ((name 'Compiler-nice.189' message 'Enable cascading of special messages by deoptimizing, thanks Eliot.
This is mostly useless, but it removes an arbitrary limitation of the language.' id '3f6f02cd-1acf-48de-a388-b5ac55e27055' date '13 February 2011' time '7:44:38.363 pm' author 'nice' ancestors ((name 'Compiler-nice.188' message 'Merge fbs.183 nice.186 nice.187 coming from inbox' id '66ccdff2-05b9-4294-9b3b-0bf2d84417fd' date '13 February 2011' time '7:39:55.07 pm' author 'nice' ancestors ((name 'Compiler-nice.187' message 'In case nil is the doItReceiver of an interactive evaluation, avoid proposing a menu that would add an inst var to UndefinedObject.' id '71dd94ed-3fc7-49e0-b180-fb04be82bc29' date '4 February 2011' time '10:17:14.337 pm' author 'nice' ancestors ((name 'Compiler-nice.184' message 'Fix DecompilerTests>>#testDecompileLoopWithMovingLimit
A to:do: loop cannot modify the limit inside the block' id 'ba12fb9c-6c57-429b-b415-1188e1faba8b' date '12 January 2011' time '10:09:27.038 pm' author 'nice' ancestors ((name 'Compiler-nice.183' message 'Cosmetic: rename two shadowing temps in order to avoid warnings in Transcript' id '228c16fb-1ba3-407c-84fd-d5722ca2be2f' date '29 December 2010' time '3:54:57.862 pm' author 'nice' ancestors ((name 'Compiler-ul.182' message '- removed #isLiteral from the ParseNode hierarchy, because it means something else. Added #isLiteralNode instead.' id 'ee785fb8-9a21-9b4a-a451-03f648a97ded' date '23 November 2010' time '1:37:48.497 pm' author 'ul' ancestors ((name 'Compiler-nice.181' message 'Let (Scanner isLiteralSymbol: #<) be true' id '86d69779-755f-0548-8a95-11173c3b8370' date '19 November 2010' time '5:32:20.688 pm' author 'nice' ancestors ((name 'Compiler-eem.180' message 'Fix ''#_'' == #'':='' (a.k.a. http://bugs.squeak.org/view.php?id=7571)' id '1f74b18a-ff12-463a-b255-aacc6363866e' date '16 November 2010' time '3:21:08.417 pm' author 'eem' ancestors ((name 'Compiler-ul.179' message '- use #= for integer comparison instead of #== (http://bugs.squeak.org/view.php?id=2788 )' id '107e924e-8060-0d48-a735-4e21340dffd8' date '16 November 2010' time '4:43:43.297 am' author 'ul' ancestors ((name 'Compiler-ul.178' message '- "fix" some decompiler tests' id '48ba6d35-c609-554f-aa46-b0c00211df90' date '28 October 2010' time '4:10:34.353 am' author 'ul' ancestors ((name 'Compiler-ul.177' message '- renamed #prefAllowUnderscoreAssignments to #allowUnderscoreAsAssignment for compatibility AST (and OB)' id '4e157cbb-4abd-4649-aeef-0213fdfe1399' date '28 October 2010' time '12:44:19.763 am' author 'ul' ancestors ((name 'Compiler-ul.176' message '- replace LiteralDictionaries with PluggableDictionaries part 2.' id 'f99f8cfe-e153-bb4e-b917-74dc15472d5a' date '24 October 2010' time '7:33:17.308 am' author 'ul' ancestors ((name 'Compiler-ul.175' message '- replace LiteralDictionaries with PluggableDictionaries part 1.' id 'de13fc25-c32d-3444-986d-8d54b0c34689' date '24 October 2010' time '7:32:36.364 am' author 'ul' ancestors ((name 'Compiler-nice.174' message 'Prevent the compiler to be pedantic with inlined messages.
When the selector is special (#ifTrue:ifFalse: #to:do: etc...), but the receiver or the arguments are not the Block expected by the inliner, the compiler pedantically #notify: the user and refuse to compile.
Change this behaviour so that a normal send occurs.' id '61855825-aa9b-47ef-a4cb-cbf9e34486f5' date '10 October 2010' time '5:51:12.369 pm' author 'nice' ancestors ((name 'Compiler-nice.173' message 'Compiler fix for http://bugs.squeak.org/view.php?id=7093
Avoid optimizing a to:do: loop that does modify its limit inside the loop. Thanks Eliot!

Note: an alternate solution would be to create a shadow variable, assign it with the limit, and optimize the block.

Note 2: the bug report also has a so far uncorrected Decompiler part and cannot be closed yet.' id 'f40f6937-a88a-4f85-b0b0-f68b310a1d92' date '8 September 2010' time '1:36:04.973 am' author 'nice' ancestors ((name 'Compiler-eem.172' message 'Fix decompilation/pretty-print of expr ifNotNil: [:var| which used to
be rendered as (var := expr) ifNotNil: [:var|.' id 'cbf01579-162b-43d4-ab9e-1099261e3570' date '31 August 2010' time '12:45:25.496 pm' author 'eem' ancestors ((name 'Compiler-nice.170' message 'minor change: avoid creating a SortedCollection when not necessary...
asSortedCollection asArray -> asArray sort' id 'f8a249cf-597d-472c-b45f-797a28d2d476' date '22 August 2010' time '8:52:09.947 pm' author 'nice' ancestors ((name 'Compiler-eem.169' message 'Allow the user to choose at what level to delcare an undeclared temp,
either method-level or block-local.' id '527cab12-cb40-42f0-bf0e-3eb940dca528' date '17 August 2010' time '5:17:57.955 pm' author 'eem' ancestors ((name 'Compiler-eem.168' message 'Merge with Compiler-nice.164.

Fix the case of special write binding.
Reminder: in case of special write binding, we must:
	1) load the VariableBinding
	2) push assigned value
	3) send value:
(see AssignmentNode>>emitCodeForEffect:encoder: )

#sizeCodeForLoad: read inst var writeNode
#sizeCodeForStore: write inst var writeNode
#sizeCodeForLoad: is sent before #sizeCodeForStore:
Therefore writeNode is read before written and the door is open for bugs.

Fortunately, #sizeCodeForStore: redo the job of #sizeCodeForLoad: and reserve space for pushing the VariableBinding on stack.

Unfortunately, it sometimes happens that the sizeCodeFor... is requested twice, the writeNode is then initialized and sizeCodeForLoad: reserve space for pushing VariableBinding a second time leading to a code size discrepancy...

Present fix implement following solution:
1) let sizeCodeForLoad: reserve size for emitCodeForLoad:encoder: operations, but don''t trust writeNode isNil for this job.
2) let sizeCodeForStore: reserve size for - and only for - emitCodeForStore:encoder: operations.' id '0757e13e-9323-4603-927b-224965d39773' date '17 August 2010' time '5:15:54.534 pm' author 'eem' ancestors ((name 'Compiler-eem.166' message 'Third and final stage of old parse node emitters and sizers cleanup.
Merges BytecodeAgnosticMethodNode into MethodNode and
deletes BytecodeAgnosticMethodNode.' id '04c47990-84b1-4832-ac47-c0c16ae18b71' date '17 August 2010' time '2:34:59.272 pm' author 'eem' ancestors ((name 'Compiler-eem.165' message 'Stage two cleanup of the old parse node sizers & emitters

Also:
Streamline Compiler>>#compile:in:classified:notifying:ifFail: .  requestor: send is unnecessary.
Fix comment typo inScanner>>scanAllTokenPositionsInto:' id 'f895af78-0bd4-4e18-94ba-0c69837d298e' date '17 August 2010' time '2:29:01.49 pm' author 'eem' ancestors ((name 'Compiler-eem.164' message 'Stage one cleanup of the old parse node sizers & emitters' id 'ea2d2d68-7509-45b6-a835-b038702661b5' date '17 August 2010' time '2:00:44.208 pm' author 'eem' ancestors ((name 'Compiler-eem.163' message 'Fix compilation after error correction.  If interactive then on correction
the entire text should be recompiled if the entire text was input (e.g.
compiling a method in a browser).  But if a selection was compiled
(e.g. doit in a workspace) then the current selection should be
recompiled.

Fix VariableScopeFinder for cascades.' id 'cd09cd52-fc4d-4999-83a6-0c89585a4caa' date '16 August 2010' time '6:35:39.357 pm' author 'eem' ancestors ((name 'Compiler-eem.159' message 'Declare temps at the minimum enclosing block scope.  Requires
deferring temp declarations until after the parse has completed.
So introduces an UndeclaredVariableNode type to stand in until
parse completes.  VariableScopeFinder visitor finds scopes.

Fix Parser>>removeUnusedTemps after a declare temps.
removeUnusedTemps cannot use encodeVariable: to lookup
out-of-scope temps; these will cause undeclared: sends within
encodeVariable:.

Fix Parser>>#parse:class:category:noPattern:context:notifying:ifFail:''s
selection of the stream after ReparseAfterSourceEditing.  It must
grab the selectionInterval from the requestor''s string, not the entire
string.

Resolve the ambiguous time stamp (almost certainly my fault) in
Compiler>>#from:class:classified:context:notifying:  between our
rep and trunk''s rep by neatening method.' id '8072bba0-f0b2-460b-a430-943e289578fc' date '15 August 2010' time '9:31:05.594 am' author 'eem' ancestors ((name 'Compiler-eem.157' message 'Log class def on declare inst and class var.
Fix typo in ParseNodeVisitor>>visitMessageNode:' id '3ac53cb6-e964-4315-b7ad-262434f9870e' date '14 August 2010' time '8:26:40.54 pm' author 'eem' ancestors ((name 'Compiler-eem.156' message 'The addition needed by the new explainTemp: code.
(Humble mumble, I forgot to add this and hence mention
that Morphic-eem.460 & ST80-eem.117 need this method)' id 'a59d6f06-25d9-4c94-8190-c287ecf7e661' date '14 August 2010' time '7:38:55.109 pm' author 'eem' ancestors ((name 'Compiler-eem.155' message 'Fix comment and computation of error temp push in
BytecodeAgnosticMethodNode>>generate:.  Remove
a couple of unused methods.' id 'e1d7ed32-bfbf-47c8-9a5e-8420449259ba' date '14 August 2010' time '6:21:02.179 pm' author 'eem' ancestors ((name 'Compiler-eem.154' message 'Fix decompilation of blocks with indirect temps, e.g.
	| x y |
	[:a :b | x := a. y := b. x+y] decompile
Correct comment of evaluate:in:to:notifying:ifFail:logged: not
we no longer install doits in dictionaries but use withArgs:executeMethod:' id '38a702f7-88c0-4176-9213-ce25c77bd3ef' date '12 August 2010' time '2:04:48.383 pm' author 'eem' ancestors ((name 'Compiler-nice.153' message 'Use more explicit storeStringHex rather than floating hex in order to be more robust.' id 'aa667119-b47a-44af-8bad-ff79f3c51d81' date '25 July 2010' time '12:27:53.774 pm' author 'nice' ancestors ((name 'Compiler-nice.152' message 'Add the possibility in new code generation scheme to access shared variables by sending message #value to the variable binding instead of fetching second instance variable.
This did already exist in old code generation scheme and is controlled by #isSpecialReadBinding.' id '11850e30-a071-425e-a01a-a52faffbddcd' date '24 July 2010' time '6:38:46.043 pm' author 'nice' ancestors ((name 'Compiler-jcg.147' message 'Change Parser>>correctVariable:interval: to allow it to look up the proposed variable in the requestor even if it starts with an uppercase letter.' id '714d775f-78af-45dc-affc-b33d59d68da5' date '23 June 2010' time '12:04:54.856 pm' author 'jcg' ancestors ((name 'Compiler-nice.146' message 'Use at:ifAbsentPut: (Pharo)' id '31f1f318-aa1d-db43-b92c-b8a28025e710' date '12 June 2010' time '2:28:03.552 am' author 'nice' ancestors ((name 'Compiler-ar.145' message 'Merging Compiler-HenrikSperreJohansen.144

Fix for BlockClosure decompilation in Workspace doits.

Previously, blocks with remoteTemps would fail to decompile, f.ex:

| x y |
[:a :b | x := a. y := b] decompile
(http://code.google.com/p/pharo/issues/detail?id=767)

Also, temp names would not be preserved when inspecting a non-remoteTemps block, say

[:x :y | | temp | 1 + x@y. ^temp] decompile printString.

Getting the instvar names from MethodTrailer if present in decompileBlock:  solves both these issues.

(ar: restore formatting and refer to SyntaxErrorNotification directly)' id '932818d3-1aeb-104b-826b-60c5a6f6f6a1' date '27 May 2010' time '9:38:04.277 pm' author 'ar' ancestors ((name 'Compiler-HenrikSperreJohansen.144' message 'Fix for BlockClosure decompilation in Workspace doits.

Previously, blocks with remoteTemps would fail to decompile, f.ex:

| x y |
[:a :b | x := a. y := b] decompile
(http://code.google.com/p/pharo/issues/detail?id=767)

Also, temp names would not be preserved when inspecting a non-remoteTemps block, say

[:x :y | | temp | 1 + x@y. ^temp] decompile printString.

Getting the instvar names from MethodTrailer if present in decompileBlock:  solves both these issues.



' id 'a77bbe8a-ac19-4883-943a-a47c1a8db1ad' date '27 May 2010' time '2:17:23.995 pm' author 'HenrikSperreJohansen' ancestors ((name 'Compiler-ar.143' message 'Verify the number of arguments in FFI calls.' id 'af1d9aa9-96ff-9e4f-9df9-94e11682c0b4' date '24 May 2010' time '8:42:36.032 pm' author 'ar' ancestors ((name 'Compiler-ar.142' message 'Merging Compiler-eem.140:

Fix code gen infinite recursion and missing error check for compiling assignments to read-only global variables.' id '65ec869f-4768-694d-9a0f-75e19f7f0510' date '20 May 2010' time '7:40:40.375 pm' author 'ar' ancestors ((name 'Compiler-ar.141' message 'Eliot''s fix for http://bugs.squeak.org/view.php?id=7532. See discussion at http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-May/150688.html

' id '14b2de31-b380-394f-a25b-4679e7800c8c' date '16 May 2010' time '6:22:58.961 pm' author 'ar' ancestors ((name 'Compiler-nice.140' message 'Merge Compiler-nice.139 (inbox)
This includes following fix from Eliot
nil out locals in a block if readBeforeWritten
- Use noteOptimizedIn: instead of noteOptimized
- Let accept: return the result of message sent to visitor
' id '1f71c916-4e14-4042-ac19-41c428f1968a' date '21 April 2010' time '9:25:46.66 am' author 'nice' ancestors ((name 'Compiler-ar.139' message 'Fix decompilation not to truncate very long decompiled methods.' id 'c15d727c-a890-224c-b427-5d6eea33efed' date '17 April 2010' time '5:18:44.704 pm' author 'ar' ancestors ((name 'Compiler-nice.138' message 'Fix http://bugs.squeak.org/view.php?id=7491
Scanner new scanTokens: ''1@-1''.
=> Scanner doesNotUnderstand: #ambiguousSelector:inRange: ' id '15955722-1326-a940-9805-280830c59af6' date '2 April 2010' time '7:40:24.521 pm' author 'nice' ancestors ((name 'Compiler-ar.137' message 'Underscore assignments and underscore selector preferences and implementation. The defaults are set to be compatible with past usage, i.e., allowUnderscoreAssignment is true and allowUnderscoreSelectors is false. Might consider changing this after 4.1.' id '090fc365-fe3c-6741-a731-3222d6ab6afa' date '24 March 2010' time '1:25:23.067 am' author 'ar' ancestors ((name 'Compiler-nice.136' message 'Multiple automatic AmbigousSelector replacement was broken dur to subtle requestorOffset magic. Attempt a correction.

I just made the replacement work, but the second occurence selection just flash , I don''t know why.

I do not really understand what I programmed... This is a door open to future bugs.
The requestorOffset inst var in Parser looks like a fragile construction to me.
 I dont understand selectInvisiblyFrom:to: neither...

Not sure what happens if we mix UnsedVariable, AmbiguousSelector and other automatic corrections.

Probably more work on this subject' id '282cba3c-3e76-064d-b111-3741aa1a3745' date '10 March 2010' time '9:39:11.938 am' author 'nice' ancestors ((name 'Compiler-nice.135' message 'move OutOfScopeNotification to Compiler' id '6157c6e3-16a1-6b46-80f0-6ab3bdf09d71' date '8 March 2010' time '10:11:35.22 pm' author 'nice' ancestors ((name 'Compiler-nice.134' message 'move SyntaxErrorNotification where it belongs, Compiler
This creates a dependency on ToolSet, but Compiler did already depend on System.' id '4c30f651-0c40-a744-ac9c-8528032a661e' date '8 March 2010' time '9:07:25.575 pm' author 'nice' ancestors ((name 'Compiler-ar.133' message 'Avoid dictionary protocol in Smalltalk.' id '58d808cd-29dd-0e42-959e-751b789cc767' date '5 March 2010' time '8:50:43.246 pm' author 'ar' ancestors ((name 'Compiler-ar.132' message 'Use Smalltalk globals instead of Smalltalk as default environment.' id '576cee71-0637-ee4a-9f36-547cae3cedcb' date '5 March 2010' time '7:54:14.389 pm' author 'ar' ancestors ((name 'Compiler-ar.131' message 'Having removed the last uses of SyntaxError to indicate non-interactive compile, simplify Parser/Compiler>>interactive to just test for non-nil requestor.' id '5a06205c-1edd-454e-97d5-e6db20aed3b1' date '4 March 2010' time '11:45:13.288 pm' author 'ar' ancestors ((name 'Compiler-nice.130' message 'Provide a better fix for http://source.squeak.org/trunk/Compiler-nice.129.mcz

BlockNode>>#addRemoteTemp: rootNode:
was always sent to the TempVariableNode definingScope...

But BlockNode>>#optimizedBlockHoistTempsInto:
might already have moved the temporaries to next upper unoptimized BlockNode (definingBlock actualScope).
This operation does not update the TempVariableNode definingScope (should it ?)

Thus, only when definingScope temporaries does not include the TempVariableNode,
should we attempt to remove it from actualScope temporaries....

Note: this does not solve (EventSensor>>#eventTickler) decompileWithTemps' id 'cdff6f07-1e9b-f746-a7b1-2cd22feb03b4' date '2 March 2010' time '1:28:40.263 am' author 'nice' ancestors ((name 'Compiler-nice.129' message 'Fix Compiler/Decompiler temporary slot mismatch
http://bugs.squeak.org/view.php?id=7467

See also my comments in response to
http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-March/145280.html

Eliot, please check....' id 'a27b827d-1354-1147-bc1a-edeb6e1f0e97' date '1 March 2010' time '11:24:30.271 pm' author 'nice' ancestors ((name 'Compiler-nice.128' message '1) Cuis 2.2 ParserSmallFix
2) simplification method:context:encoder: replaced by method:context:' id 'd8c8b1f6-f75a-554d-9277-cb68ee0202f7' date '26 February 2010' time '12:23:36.467 am' author 'nice' ancestors ((name 'Compiler-nice.127' message 'Let this one raise a SyntaxError thanks to earlier encoder initialization:
Compiler evaluate: ''0r0 + 1''' id '5f00acd4-a5a9-d94a-9406-74281252e74f' date '25 February 2010' time '3:33:15.468 am' author 'nice' ancestors ((name 'Compiler-nice.126' message 'Implement a Parser compatibility layer in Scanner: #notify:at:.

I used it for inserting NumberParser errorString...
Alas, it is not understood by Scanner, only by Parser.
Alternative #offEnd: lacks of precision regarding position, so I clearly prefer implementing the compatible message.' id 'e08279be-3286-9144-a08f-c8debbbc6c25' date '25 February 2010' time '3:02:54.127 am' author 'nice' ancestors ((name 'Compiler-nice.125' message 'Let Parser better signal NumberParser errors.' id '627a24a0-8e6d-1944-86f9-2a7ae9bf5216' date '25 February 2010' time '2:50:32.978 am' author 'nice' ancestors ((name 'Compiler-nice.124' message 'Use a Text emphasizing error message in bold red rather than a String in SyntaxErrorNotification.
Maybe this would find a better place in the handling of notification, but this change was easier.' id '06c8a9e4-1a69-b04b-88d5-539160553a1d' date '25 February 2010' time '2:15:08.187 am' author 'nice' ancestors ((name 'Compiler-nice.123' message 'Warn about ambiguous selector like @- in the Transcript when compiling in non interactive mode.' id '618554a7-dfec-f441-9383-e4da0a507ad0' date '25 February 2010' time '2:12:07.522 am' author 'nice' ancestors ((name 'Compiler-nice.122' message 'Forbid the construction (-  1)
The minus sign now MUST NOT be separated from the literal number.
RATIONALE: this syntax is not Smalltalk, not portable, not documented, not the same inside #(- 1) and is just adding confusion to the -1 rule, especially since the binary selectors can now embed a $- at any place.

WARNING: THIS MIGHT INTRODUCE INCOMPATIBILITY IN PACKAGES
we might introduce a Preferences if the case shows up.
I did a Compiler recompileAll, which works fine in trunk.

In order to achieve this, I had to first correct the hereEnd and mark instance variables near end of stream.
The scanner scans two letters ahead, so it clearly has to test both aheadChar then hereChar.
Previously, it did decide on source atEnd and hereChar only, which was a bogus for example in case of a trailing separator in source.
WARNING: hope this won''t break any obscure workaround in Debugger selection.' id '74bd56ce-6d06-c446-bd8b-eac2908c4b0b' date '24 February 2010' time '2:02:09.348 am' author 'nice' ancestors ((name 'Compiler-nice.121' message 'Change requestorOffset initialization order so that I can evaluate
#(1--2) and get automatic correction working' id 'e13bfbb0-f02a-484c-b76e-e6f8f07e8917' date '23 February 2010' time '5:50:41.052 pm' author 'nice' ancestors ((name 'Compiler-nice.120' message 'Authorize - at any position in binary selectors (like VW 7.7)
See http://bugs.squeak.org/view.php?id=3616
Address the problem of compiling 1@-2 with following strategy:

If compiler is non interactive, then compile with backward compatibility 1 @ (-2).
If compiler is interactive, propose a menu to disambiguate and insert a proper space.
1@ -2 -> MessageSend receiver: 1 selector: #''@'' argument: -2
1@- 2 -> MessageSend receiver: 1 selector: #''@-'' argument: 2

Warning: Squeak did understand (1@-   2) as (1 @ (-2))....
I didn''t do anything to support this vicious Squeakism, and by now the semantics are change.
' id '9429cc05-281b-484e-94c2-bd0baf4f5230' date '23 February 2010' time '5:14:44.049 pm' author 'nice' ancestors ((name 'Compiler-nice.119' message '1) Connect Number class>>#readSqueakSyntaxFrom:
2) remove a now useless fixTemps' id '88476d19-0098-e244-9ed8-14b04fe84dac' date '23 February 2010' time '2:44:50.52 pm' author 'nice' ancestors ((name 'Compiler-ar.118' message 'Provide a defaultResumeValue for UndeclaredVariableWarning.' id '47b851d8-d2a5-6049-bd90-22ca9853bb9b' date '13 February 2010' time '3:26:20.872 pm' author 'ar' ancestors ((name 'Compiler-ar.117' message 'Better progress in Compiler>>recompileAll.' id '289998b9-e67d-524b-a05a-49efd3bac2bf' date '12 February 2010' time '12:56:09.748 am' author 'ar' ancestors ((name 'Compiler-ul.116' message '- don''t create a block in Dictionary >> #bindingOf:' id '29cfe126-9fa7-0149-9c25-e068d536b0b9' date '25 January 2010' time '10:40:59.752 pm' author 'ul' ancestors ((name 'Compiler-ar.115' message 'Making Tests unloadable: Move Compiler-Tests to Tests-Compiler.' id '210eedd3-6a9f-f541-8699-2dbe477bb147' date '4 January 2010' time '4:27:09.715 pm' author 'ar' ancestors ((name 'Compiler-ar.114' message 'Make Etoys unloadable: Move Etoys content to Etoys package.' id '415ca0c9-3f8a-204f-950f-d09c6445de70' date '4 January 2010' time '12:36:33 pm' author 'ar' ancestors ((name 'Compiler-ar.112' message 'Remove unnecessary XMLWriter dependency from a compiler test.' id '6ebd47ad-90c6-c646-952e-75ee317c35e0' date '3 January 2010' time '2:24:27 am' author 'ar' ancestors ((name 'Compiler-nice.111' message 'Cosmetic: move or remove a few temps inside closures' id '46325f49-4b22-499c-aa2d-9cc5f16ebd65' date '27 December 2009' time '5:01:29 am' author 'nice' ancestors ((name 'Compiler-nice.110' message 'Add support for parsing parameter names' id '017eda80-c544-4827-bdc3-54f6cadca3f3' date '25 December 2009' time '7:15:24 am' author 'nice' ancestors ((name 'Compiler-ar.109' message 'CompiledMethodTrailer phase 3.' id 'e99fcffd-5f6d-aa4a-b09a-fb3248edc7f8' date '22 December 2009' time '12:58:44 pm' author 'ar' ancestors ((name 'Compiler-ar.108' message 'CompiledMethodTrailer phase 2.' id '538bb76e-8967-e445-9b2c-161c98c289d6' date '22 December 2009' time '12:48:23 pm' author 'ar' ancestors ((name 'Compiler-ar.107' message 'CompiledMethodTrailer phase 1: Preparations.' id '46345836-169c-a245-aa07-b546b826fdc4' date '22 December 2009' time '12:38:17 pm' author 'ar' ancestors ((name 'Compiler-jcg.106' message 'Inline the transformation defined by FutureMaker in Kernel-jcg.329.' id 'a95c76dc-5670-3c45-af7e-75c89f852c95' date '18 December 2009' time '12:12:50 pm' author 'jcg' ancestors ((name 'Compiler-ul.105' message '- marked unimplemented mirror primitives'' tests as expected failures in MirrorPrimitiveTests' id 'c9f122e9-5eb7-f747-afe6-d8f2f186d740' date '15 December 2009' time '8:26:03 am' author 'ul' ancestors ((name 'Compiler-ul.104' message '- enh: DecompilerTests is a subclass of LongTestCase. If you don''t want to run long tests (this is the current default behavior),  just do it: LongTestCase doNotRunLongTestCases. If you want to enable them again, then do it: LongTestCase runLongTestCases.' id 'a99aecca-760a-964f-8ba4-20bc62b24d28' date '9 December 2009' time '11:15:41 am' author 'ul' ancestors ((name 'Compiler-ul.103' message '- faster Scanner >> #initScannerForTokenization (by a factor of ~3.38)' id '8100e26f-3d13-9f48-9218-a8fd95ca5347' date '6 December 2009' time '8:00:45 am' author 'ul' ancestors ((name 'Compiler-ul.102' message '- lifted a missing change from Pharo for ByteArray literals
- ScannerTest >> #testLiteralSymbols and a test in DecompilerTestFailuresCollector pass now' id 'b4de7fcc-4713-aa42-ac62-f7f1de2b6c16' date '3 December 2009' time '6:04:35 am' author 'ul' ancestors ((name 'Compiler-ul.101' message '- fix: #[ is not a valid literal anymore, so Scanner isLiteralSymbol: #''['' should return false (instead of syntax error). This also fixes broken tests: ScannerTest >> #testLiteralSymbols and a test in DecompilerTestFailuresCollector' id '0c2468f7-4619-0743-8f4e-14bdc2f195c6' date '2 December 2009' time '7:09:46 am' author 'ul' ancestors ((name 'Compiler-nice.100' message 'Let token be '':='' when := is used for assignment.
This used to make some Decompiler tests fail...
http://code.google.com/p/pharo/issues/detail?id=740' id '03472bb2-f89b-b040-ae9b-4e07e714b59b' date '1 December 2009' time '3:45:36 am' author 'nice' ancestors ((name 'Compiler-nice.99' message 'rename scanLitByte -> scanLitByteVec as suggested by Eliot' id 'ddf7600a-55a4-4d6f-964a-14a5301a415d' date '27 November 2009' time '11:14:24 am' author 'nice' ancestors ((name 'Compiler-nice.98' message 'Add support for literal ByteArray #[1 2 3]' id '4853aa4f-5bcb-e242-a130-f41f2c4d09ae' date '27 November 2009' time '12:54:16 pm' author 'nice' ancestors ((name 'Compiler-cwp.97' message 'Added a test that demonstrates a bug in block copying. 

If a block containing a return is copied, it will raise BlockCannotReturn when it''s evaluated, even if the home context is still on the stack.

http://bugs.squeak.org/view.php?id=7414' id '815de973-26b4-4f93-b1ee-4905e56fa4b3' date '16 November 2009' time '8:35:05 am' author 'cwp' ancestors ((name 'Compiler-nice.96' message 'Test and minimal change to isLiteralSymbol: to make the test pass.

This is related to http://bugs.squeak.org/view.php?id=7211
I did not apply change proposed above, though it might be a good idea to restrict unquoted notation to explicitely documented valid Smalltalk literals.

There are pending decisions about wide characters and binary selectors to be resolved first.' id 'bfe3f3dc-3f22-c04f-974e-90cb4725b53e' date '27 October 2009' time '3:25:48 am' author 'nice' ancestors ((name 'Compiler-nice.95' message 'Be verbose in case of illegal character
This might be usefull if the character is not not visible, or not displayable by current font.' id '33175bf0-fc6b-7f4f-ba04-3433f42610f9' date '27 October 2009' time '2:58:34 am' author 'nice' ancestors ((name 'Compiler-nice.94' message 'Ensure usage of #typeTableAt:  rather than typeTable ivar to handle Wide characters' id '42292a5b-3735-fc4b-883b-42249a88aac9' date '27 October 2009' time '12:28:57 pm' author 'nice' ancestors ((name 'Compiler-nice.93' message 'Fix a test I broke : the test now needs (keys asSet)' id '27c49fc6-0091-4311-988d-aedff3653a8f' date '23 October 2009' time '11:57:51 am' author 'nice' ancestors ((name 'Compiler-jcg.92' message 'ParseNode>>notYetImplemented is no longer necessary, now that the implementation inherited from Object raises an error instead of popping up an exception (as of Kernel-jcg.279).' id '25bbef92-3bec-4686-8efe-7f36dc99ff4f' date '21 October 2009' time '1:13:35 am' author 'jcg' ancestors ((name 'Compiler-nice.91' message 'forgot one #asArray sort' id '556fa6ce-bedb-40be-a35e-b73241447237' date '21 October 2009' time '12:29:40 pm' author 'nice' ancestors ((name 'Compiler-nice.90' message 'Use #keys rather than #fasterKeys
Note that pattern (x keys asArray sort) could as well be written (x keys sort) now that keys returns an Array...
This #asArray is here solely for cross-dialect/fork compatibility.' id '9d0fa200-caaa-42f6-bd09-aa6f8c535fcb' date '21 October 2009' time '12:19:50 pm' author 'nice' ancestors ((name 'Compiler-nice.89' message 'use keys asSet where due' id '97fdcb43-1596-49f7-bf95-1c048cafd2b7' date '20 October 2009' time '9:27:04 am' author 'nice' ancestors ((name 'Compiler-nice.88' message 'use fasterKeys' id '096cf390-ac02-d44d-bb77-f785bce5f9cc' date '19 October 2009' time '11:09:39 am' author 'nice' ancestors ((name 'Compiler-jcg.87' message 'Revert to lazy-initialization of method properties, which is used by the externally-maintained Prolog package (which loads cleanly into 3.10.2, but not trunk).

Part 2 of 2... need to load -jcg.85 first (this is taken care of by the Monticello Configuration update-jcg.32.mcm)' id '71bf4e8d-f9f3-4371-a218-ad31a985cfd8' date '30 September 2009' time '11:21:53 am' author 'jcg' ancestors ((name 'Compiler-ul.86' message '- new #scanFor: for LiteralDictionary too' id 'aed23852-da1c-3b4f-88e8-33c860f282dd' date '30 September 2009' time '3:03:27 am' author 'ul' ancestors ((name 'Compiler-jcg.85' message 'Revert to lazy-initialization of method properties, which is used by the externally-maintained Prolog package (which loads cleanly into 3.10.2, but not trunk).

Part 1 of 2... need to first re-add the #properties method to Parser before changing methods to send it.' id '21a5f88d-4107-48c3-b41c-d5ea735319a7' date '30 September 2009' time '1:14:16 am' author 'jcg' ancestors ((name 'Compiler-tfel.84' message 'MethodContext>>who is deprecated, and here we only need the methodClass anyway, so replace that' id '8e446c0f-0888-4958-9bb0-6b570361c108' date '16 September 2009' time '12:55:08 pm' author 'tfel' ancestors ((name 'Compiler-nice.83' message 'Add the test for bug http://bugs.squeak.org/view.php?id=6797
self deny: (0.5s1 scale = 0.50s2 scale).' id '421fd985-67d3-4991-9bcf-e7abae734f34' date '12 September 2009' time '9:25:13 am' author 'nice' ancestors ((name 'Compiler-nice.82' message 'Part of fix for http://bugs.squeak.org/view.php?id=6797
Use #literalEqual: for testing equality of two literals.
' id '4c77174b-dd90-4c6d-943e-fc90a02f6677' date '12 September 2009' time '9:07:16 am' author 'nice' ancestors ((name 'Compiler-ar.81' message 'Another required script for loading the latest batch of closure fixes.' id '1373ef7e-27c9-964c-bd38-7ce0168b4daf' date '5 September 2009' time '10:24:42 am' author 'ar' ancestors ((name 'Compiler-ar.80' message 'Add an initialize method working around the limitations of MCDs and scripts.' id '82001507-c038-784a-a4e2-0c969b53800f' date '5 September 2009' time '10:06:25 am' author 'ar' ancestors ((name 'Compiler-eem.79' message 'Fourth package of eight in closure compiler fixes 9/5/2009.

Second stage of the closure compiler fixes for
- miscompilation of optimized blocks
- bugs in statement highlighting in the debugger
- storing the selector as the penultimate literal of a method
  directly unless it has properties, in which case it has an
  AdditionalMethodState.  Saves significant space.

Throws the switch to the new closure analysis in BlockNode>>analyseArguments:temporaries:rootNode: using in place of analyseTempsWithin:rootNode:assignmentPools: analyseTempsWithin:rootNode:.

This requires
	Exceptions-eem.12
	Kernel-eem.242
	Compiler-eem.78' id 'f52d0730-d744-40d2-bdd1-f7412fc1b8f1' date '5 September 2009' time '4:42:29 am' author 'eem' ancestors ((name 'Compiler-eem.78' message 'Third package of eight in closure compiler fixes 9/5/2009.

Stage one of the closure compiler fixes for
- miscompilation of optimized blocks
- bugs in statement highlighting in the debugger
- storing the selector as the penultimate literal of a method
  directly unless it has properties, in which case it has an
  AdditionalMethodState.  Saves significant space.

Requires
	Exceptions-eem.12
	Kernel-eem.242' id 'da3b583f-896a-416c-9c4f-3687f66b8530' date '5 September 2009' time '4:26:32 am' author 'eem' ancestors ((name 'Compiler-mha.77' message 'removed obsolete method Parser >> #pragmaLiteral (replaced by #pragmaLiteral: in Compiler-mha.76)' id '111b37ed-654c-45a3-a38a-46022d8618e0' date '3 September 2009' time '2:49:48 am' author 'mha' ancestors ((name 'Compiler-mha.76' message 'inserted an extension originally contributed by Eliot Miranda (to make Alien support possible in the trunk)' id '1218194f-4a88-44df-9d79-e80638a53aa7' date '1 September 2009' time '4:35:49 am' author 'mha' ancestors ((name 'Compiler-tfel.75' message 'MethodNode>>generateWith:using:

Nuked the method according to Andreas'' request on the mailinglist' id 'c0548007-a567-49ac-81ed-f0df3a098e65' date '1 September 2009' time '5:13:15 am' author 'tfel' ancestors ((name 'Compiler-tfel.74' message 'MethodNode>>generateWith:using: was missing a variable declaration for ''literals'', I just put it in' id '4633c11d-cc0d-4149-9f3d-018d5f0f24f7' date '31 August 2009' time '7:48:14 am' author 'tfel' ancestors ((name 'Compiler-cwp.73' message 'The compiler now uses notifications to signal that a correctable error has been found in the method source, rather than interacting directly with the user. ' id '0fc4552f-d0c6-481a-8fa0-2bea842240b2' date '25 August 2009' time '8:45:22 am' author 'cwp' ancestors ((name 'Compiler-rss.72' message 'Collections-rss.118' id '8e73baaa-38e9-4fa1-9f55-025566fee18e' date '23 August 2009' time '1:10:39 am' author 'rss' ancestors ((name 'Compiler-ar.71' message 'Post-closure cleanup and underscore removal.' id '87047498-b171-d94a-9223-a3d840027861' date '18 July 2009' time '7:51 am' author 'ar' ancestors ((name 'Compiler-ar.70' message 'Compile using Closures!' id 'fd8c37c0-8ed5-f04f-9044-dbdfb2d69cc2' date '15 July 2009' time '10:54:31 am' author 'ar' ancestors ((name 'Compiler-ar.69' message 'Closure compiler, main part.' id '9812695d-7f35-9a44-b4bc-b27b782bbd8a' date '15 July 2009' time '10:34:46 am' author 'ar' ancestors ((name 'Compiler-ar.68' message 'Prerequiste changes for Closure installation.' id 'eb94f3b8-a450-2545-ad1c-69b18d92467a' date '15 July 2009' time '10:10:41 am' author 'ar' ancestors ((name 'Compiler-edc.62' message 'To follow this see
http://bugs.squeak.org/view.php?id= 6704' id '03774d82-5794-410f-91d7-5c84aa2a790f' date '4 November 2007' time '8:16:55 am' author 'edc' ancestors ((name 'Compiler-edc.60' message 'To follow this see
http://bugs.squeak.org/view.php?id= 5935' id '3ca66f20-2dee-40cf-82b8-4b1c96ea8592' date '8 May 2007' time '6:23:19 pm' author 'edc' ancestors ((name 'Compiler-edc.59' message 'To follow this see
http://bugs.squeak.org/view.php?id= 5936' id '2c2a0358-316a-4005-a3ef-0e41efb00454' date '8 May 2007' time '4:54:25 pm' author 'edc' ancestors ((name 'Compiler-edc.58' message 'To follow this see
http://bugs.squeak.org/view.php?id= 1014' id '4a66d4f1-7e23-4491-994a-7fb65af63783' date '13 April 2007' time '11:54:29 am' author 'edc' ancestors ((name 'Compiler-sd.57' message 'http://bugs.impara.de/view.php?id=3331

Eval problem fixed by scott' id '1e313902-5e8c-11db-82f2-001124e3ab0e' date '18 October 2006' time '11:36:23 am' author 'sd' ancestors ((name 'Compiler-lr.56' message '- merged code to fix unknown pragma selectors
- don''t allow class names in pragmas (to be consistent)
- use pragmas to define primitive-pragmas' id 'f429f722-c39f-4acf-9d8c-c8a38320eaa8' date '5 October 2006' time '10:14:04 am' author 'lr' ancestors ((name 'Compiler-lr.55' message '- allow binary selectors in pragmas' id 'c1d1a532-2210-4ee9-b66a-50c3eeefd6ce' date '21 August 2006' time '9:24:02 am' author 'lr' ancestors ((name 'Compiler-lr.54' message '- offer to correct pragma message selectors if they are unknown to the system' id '9ea70c0b-1ebc-4d35-b9f2-bfa1e5e57f8d' date '19 August 2006' time '5:09:02 pm' author 'lr' ancestors ((name 'Compiler-md.53' message 'fix to make MethodFinder work with both now and old AST' id '138e48f1-2d8f-42e6-9e14-a2cc1c8c34f4' date '2 August 2006' time '5:50:07 pm' author 'md' ancestors ((name 'Compiler-md.51' message 'removed broken tests' id 'be84aa2e-c1fc-4783-886b-42ba38142007' date '14 July 2006' time '4:39:56 pm' author 'md' ancestors ((name 'Compiler-lr.50' message '- fixed more pragma bugs (throw an error for <1> and <foo bar>)' id '47ef9423-0f74-11db-b64a-000a9573eae2' date '9 July 2006' time '7:56:43 pm' author 'lr' ancestors ((name 'Compiler-lr.49' message '- allow pragmas before and after method temps
- properly trigger an error for invalid pragmas' id '25e18bd4-d7c2-451c-9d73-aa93dffe1cc0' date '3 July 2006' time '3:05:53 pm' author 'lr' ancestors ((name 'Compiler-sd.48' message '3515 - Parser fails in #defineClass: becasue Metaclass doest not understand #category' id '6b784ed6-4e6d-430a-8795-469b7eec4306' date '29 April 2006' time '10:25:04 pm' author 'sd' ancestors ((name 'Compiler-md.47' message 'endpc --> endPC' id '34d77546-d469-11da-8f58-000d933a223c' date '25 April 2006' time '4:38:48 pm' author 'md' ancestors ((name 'Compiler-md.46' message 'merge for image' id 'aacda43a-d364-11da-8831-000d933a223c' date '24 April 2006' time '9:33:47 am' author 'md' ancestors ((name 'Compiler-fbs.33' message 'This version converts "== <integer literal>" to "= <integer literal>" in response to Dan Ingalls'' note: http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-February/100600.html' id '298f05e4-d0ed-3b4a-93d6-231e483acdcf' date '14 February 2006' time '5:45:15 pm' author 'fbs' ancestors ((name 'Compiler-md.31' message 'revert patch to Decompiler>>decompileBlock, skip -md.30 for now.' id '86ba0dcd-cafc-4521-a3ae-b2c371bfcb51' date '22 January 2006' time '7:39:26 pm' author 'md' ancestors ((name 'Compiler-md.29' message 'changes from the ClosureCompiler' id '5c2f9485-33db-4a9c-b720-f077ef3f0fb7' date '20 January 2006' time '11:06:45 pm' author 'md' ancestors ((name 'Compiler-md.28' message 'Change Set:		decompileBlock-md
	Date:			24 November 2005
	Author:			Marcus Denker
	A  simplification for BlockContext>>decompileBlock:
	The Method got the tempNames by compiling the source of the method. This
	is already implemented in methodNode tempNames... thus not needed here.' id 'f9cea385-aef5-488c-97d7-b933a9a2685e' date '19 January 2006' time '8:59:50 am' author 'md' ancestors ((name 'Compiler-md.27' message 'Change Encoder>>allLiterals to not make a PropertyLiteral Instance. Jut put in nil' id '16e59d13-0829-4a46-8086-fbd11749ecd2' date '18 January 2006' time '9:37:13 am' author 'md' ancestors ((name 'Compiler-sd.26' message 'made diry by the annotation cs we put in the stream
6713' id 'b67aab01-962a-404c-9a51-2bcee96f81d8' date '15 January 2006' time '7:17:11 pm' author 'sd' ancestors ((name 'Compiler-stephaneducasse.25' message '001 Compiler AnnotChanges without recompileAll.' id '2ffbd075-408b-4dc0-ab01-ed9cea82a701' date '15 January 2006' time '6:11:20 pm' author 'stephaneducasse' ancestors ((name 'Compiler-sd.24' message 'merge adrian and cees fixes.
	al.23 and CdG.22
	
- 2271' id '99b6d042-89b5-49ea-9a72-94bcf887fec5' date '13 January 2006' time '11:20:16 pm' author 'sd' ancestors ((name 'Compiler-CdG.22' message 'Harvested Mantis #2271' id '8c5ab31e-c54c-4f46-badd-ffde154db66b' date '8 December 2005' time '7:34:53 pm' author 'CdG' ancestors ((name 'Compiler-stephaneducasse.21' message 'This version of the package include nows this cs

"Change Set:		fixes
Date:			5 November 2005
Author:			Stephane Ducasse

Some fixes to get back some cleans of marcus on the compiler and also the possibilities to load MC code.

The definitions of the two interactive methods is clearly a temporary solution: since they make compiler depends on tools via the faked exception SyntaxError (which is a subclass of StringHolder)"

This package may not load with other version than 6702 due to load order problems.' id 'f2b94ea2-95bd-47dd-b263-c958e44686d0' date '5 November 2005' time '7:55:47 pm' author 'stephaneducasse' ancestors ((name 'Compiler-stephaneducasse.20' message 'include the changes that where giving a problem when loading PlusTools. So the package may not load alone.' id '89158ed0-0c6e-4353-a01c-3b4a226e2b8d' date '5 November 2005' time '3:19:18 pm' author 'stephaneducasse' ancestors ((name 'Compiler-CdG.19' message 'removed a bit more...' id '9ec82252-9f23-3d45-8d05-b3b58e25eb74' date '31 October 2005' time '9:37:12 pm' author 'CdG' ancestors ((name 'Compiler-CdG.18' message 'remove some dangerous changesets from the plustools package' id '9c9a545f-6137-394c-b540-99e97258c2ce' date '31 October 2005' time '9:27:15 pm' author 'CdG' ancestors ((name 'Compiler-CdG.16' message 'Integrated ToolBuilder-UI-Refactor-FillInTheBlank-1.cs from Mantis #1828' id '3765f4fb-a961-0448-8900-177c17bfdd30' date '17 October 2005' time '9:05:05 pm' author 'CdG' ancestors ((name 'Compiler-CdG.15' message 'Integrated ToolBuilder-UI-Refactor-PopUpMenu-1.cs from Mantis #1828 ' id '2671aea2-2b8f-5c4c-af64-836618ef026f' date '17 October 2005' time '7:58:39 pm' author 'CdG' ancestors ((name 'Compiler-sd.14' message 'merge al12 and md13

Bugfix for Mantis report:
0001820: Parser>>parseArgsAndTemps: broken

Bug was introduced in 3.8 by the enhancement of additionally displaying the method selector in which a temp is shadowed.

To reproduce, evaluate: "Compiler parserClass new parseArgsAndTemps: ''foo | tmp |'' notifying: nil"

Additionally removes a duplicated method.' id 'a7a74a0f-7464-450d-b6f2-e116d5f660ee' date '16 October 2005' time '5:26:54 pm' author 'sd' ancestors ((name 'Compiler-md.13' message 'small refactoring in LiteralDict scanFor:' id '21a994e1-8fcc-415e-a3d4-3e188e627b98' date '7 October 2005' time '4:12:09 pm' author 'md' ancestors ((name 'Compiler-stephaneducasse.12' message 'morphicsplitters.1.st' id '2ac30908-9790-4e5a-b3f1-0cc97884e3fa' date '10 September 2005' time '3:14:25 pm' author 'stephaneducasse' ancestors ((name 'Compiler-md.11' message 'Change Set:		RemoveUnusedTempNameCache-bvs
Date:			6 January 2005
Author:			Benjamin Schroeder

CompiledMethod keeps a cache of temporary names for a single CompiledMethod instance. The cache is set after compilation and during certain debugger operations. However, it is never read.

Keeping the cache creates an extra reference to the most recently compiled method. This can be a problem in certain obscure situations, such as including the method in an image segment.

This changeset removes the cache.' id 'bc578395-e241-4ccc-bc44-c91bf5167849' date '5 September 2005' time '4:11:59 pm' author 'md' ancestors ((name 'Compiler-md.10' message '- removed dialect support from DialectStream
- renamed DealectStream to ColoredCodeStream' id 'a6be1559-0f43-4056-9e37-10db4acc0a6f' date '15 August 2005' time '11:07:15 am' author 'md' ancestors ((name 'Compiler-md.9' message 'remove support for #SQ00 alternate Syntax' id '5267ce2c-cef8-46ba-a697-dba91b5fbcd5' date '14 August 2005' time '6:03:34 pm' author 'md' ancestors ((name 'Compiler-md.8' message 'make Decompiler>>decompileBlock use BlockCtx>>endpc' id '5db8e79c-7e76-4643-9240-dcc3ede75e5b' date '9 August 2005' time '8:08:15 pm' author 'md' ancestors ((name 'Compiler-md.7' message 'Change Set:		6603CleaningUtilities
Date:			30 March 2005
Author:			stephane ducasse

Move some utilities close to the class they use, i.e. Scanner' id '18778297-6ba1-4b56-becc-b6779f5399bc' date '6 August 2005' time '12:01:07 pm' author 'md' ancestors ((name 'Compiler-md.6' message 'add Compiler class>>recompileAll' id 'bf1f1b14-9bcf-4efe-b356-0de3bc4f1566' date '5 August 2005' time '3:25:41 pm' author 'md' ancestors ((name 'Compiler-md.5' message 'Change Set:		New Changes
Date:			5 June 2005
Author:			stephane ducasse

Clean nearly all the tests in 3.9
	- use assert where needed
	- removed empty setUp/tear
	- removed empty categories
	- changes testing->tests
	- renamed tests
	- recategorize as yet unclassified' id '1d79303c-6786-4c10-8ff9-77c28454fc2d' date '4 August 2005' time '5:38:23 pm' author 'md' ancestors ((name 'Compiler-md.4' message 'adds format: textOrStream in: aClass notifying: aRequestor contentsSymbol: aSymbol

adds format: textOrStream in: aClass notifying: aRequestor decorated: aBoolean

(both from RB)' id 'f45e5698-e87e-4362-bd9f-94f2c6b7bc10' date '3 August 2005' time '12:12:26 am' author 'md' ancestors ((name 'Compiler-md.3' message 'Change Set:		defaultClassCategory-hboon
Date:			21 November 2004
Author:			Yar Hwee Boon

Set the default class category to be the same as the current class in the prompt to define new class' id '54e28b3f-1bfa-4720-809c-fa3c78856888' date '2 August 2005' time '9:07:38 pm' author 'md' ancestors ((name 'Compiler-md.2' message 'moved primitiveNode into another category' id 'd6464621-203b-4920-9928-129b9cc3f045' date '29 July 2005' time '4:15:11 pm' author 'md' ancestors ((name 'Compiler-dew.1' message 'Initial version from 3.8 partitioning.' id 'f04abbc9-ebd0-11d9-869f-000d93572e0e' date '3 July 2005' time '10:44:20 am' author 'dew' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Compiler-al.12' message 'Bugfix for Mantis report:
0001820: Parser>>parseArgsAndTemps: broken

Bug was introduced in 3.8 by the enhancement of additionally displaying the method selector in which a temp is shadowed.

To reproduce, evaluate: "Compiler parserClass new parseArgsAndTemps: ''foo | tmp |'' notifying: nil"

Additionally removes a duplicated method.' id 'ece35314-4960-40e3-8058-921ba5bf1e74' date '29 September 2005' time '5:03:03 pm' author 'al' ancestors ((name 'Compiler-al.12' message 'Bugfix for Mantis report:
0001820: Parser>>parseArgsAndTemps: broken

Bug was introduced in 3.8 by the enhancement of additionally displaying the method selector in which a temp is shadowed.

To reproduce, evaluate: "Compiler parserClass new parseArgsAndTemps: ''foo | tmp |'' notifying: nil"' id 'a85e53ec-7b8f-4dca-bcfe-2eb8711302be' date '29 September 2005' time '5:01:16 pm' author 'al' ancestors ((id 'bc578395-e241-4ccc-bc44-c91bf5167849')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Compiler-al.23' message '- merge' id '0ee9f3c1-d4e6-4d6f-ab09-d81a1f06f832' date '13 January 2006' time '7:15:19 pm' author 'al' ancestors ((name 'Compiler-al.22' message '- changes corresponding to allClasses, allTraits interface' id '5bc0dbae-76a9-4dee-86d2-ebf997cbdec5' date '13 January 2006' time '5:27:37 pm' author 'al' ancestors ((id 'f2b94ea2-95bd-47dd-b263-c958e44686d0')) stepChildren ())(name 'Compiler-sd.22' message 'lukas fix ' id 'ca293b5f-25f6-4461-82cb-afe5e7195018' date '19 December 2005' time '5:03:27 pm' author 'sd' ancestors ((id 'f2b94ea2-95bd-47dd-b263-c958e44686d0')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Compiler-al.45' message 'Small refactoring of MethodNode>>generate and related methods (needed by MethodWrappers)' id 'b21f0d79-e6ee-4fa0-ae24-49e647baebee' date '21 April 2006' time '5:32:04 pm' author 'al' ancestors ((name 'Compiler-DF.5' message 'Rename of #generateFrom:using: to #generateWith:using:' id 'aeda5e24-13ec-894f-8d21-887729dd6761' date '19 April 2006' time '12:03:34 am' author 'DF' ancestors ((name 'Compiler-DF.45' message 'empty log message' id '9806bf03-5d59-6f4d-96d4-fd3412e2d2b3' date '17 April 2006' time '2:43:58 pm' author 'DF' ancestors ((name 'Compiler-md.44' message '- pretty print use := by default' id '8dc398e2-af7f-11da-a7a4-000d933a223c' date '9 March 2006' time '4:15:33 pm' author 'md' ancestors ((name 'Compiler-md.43' message '- remove Preference #ansiAssignmentOperatorWhenPrettyPrinting

- set selector when evaluating a #Doit. Fixes MessageTally tallySends:

- cleanups in Parser: remove old Properties code
	- cleanups in Encoder: use #binding, not #associationFor:. 
	
' id '577df430-aaca-11da-886d-000d933a223c' date '3 March 2006' time '4:28:18 pm' author 'md' ancestors ((name 'Compiler-md.42' message '- nLits check moved into compiledMethod
- moved setting of encoder regquestor from Behavior
  to Compiler
- simplified compile:in:notifying:ifFail:
- recategorisations ' id 'b80ae88b-a845-11da-a8bb-000d933a223c' date '28 February 2006' time '11:33:55 am' author 'md' ancestors ((name 'Compiler-md.41' message '- environment removal' id 'a873d9ed-88bd-4e4e-8564-c90ea6f52180' date '24 February 2006' time '11:11:48 pm' author 'md' ancestors ((name 'Compiler-md.40' message '- BlockContext>>decompileText
- refactoring to not reference Decompiler class' id '19a8ad92-a180-4312-a616-aaa02ade032c' date '22 February 2006' time '10:10:41 pm' author 'md' ancestors ((name 'Compiler-md.39' message '- add BlockNode>>#decompileString
- remove Compiler class>>#old
- add some methods from the NewCompiler
- remove #asColorizedSmalltalk80Text
- cleanups' id 'fb93c298-fa35-4dd7-8b00-ac4605318e4b' date '21 February 2006' time '9:27:29 am' author 'md' ancestors ((name 'Compiler-md.38' message '- delete Compiler>>#cacheDoItNode
- remove ivar cacheDoItNode' id '424a3d59-a345-4991-b61a-e7abfd4b6bb0' date '19 February 2006' time '12:11:34 am' author 'md' ancestors ((name 'Compiler-md.37' message 'empty log message' id '8e065014-9488-40c7-a345-96d7ab4da73c' date '18 February 2006' time '1:35:35 pm' author 'md' ancestors ((name 'Compiler-md.36' message 'Put back in the simplified Decompiler>>#decompileBlock:' id '2c6697b2-a7b9-46d4-b6ac-1a35e684d9f1' date '16 February 2006' time '4:45:58 pm' author 'md' ancestors ((name 'Compiler-md.35' message 'cleaned up unused old propertu code in parser' id '80bb6f9f-5655-4f1a-8a87-e3ec2feeaa92' date '16 February 2006' time '2:10:16 pm' author 'md' ancestors ((name 'Compiler-md.34' message 'Changes for Method Properties' id '3eb726fd-b61a-492f-af52-bd4bc81541b2' date '15 February 2006' time '5:33:17 pm' author 'md' ancestors ((name 'Compiler-md.33' message '0002570: [Fix] When Color prety printing it is hard to read the light tan literals against 
	 the white background.' id 'ebb04e9c-3f3c-4b65-8087-d0a541074752' date '14 February 2006' time '9:03:18 pm' author 'md' ancestors ((name 'Compiler-md.32' message '- remove MethodNode>>#generateNative
- add generate (to call generate: #(0 0 0 0).
- fix senders to use it' id '3b542384-712f-415e-8e6a-f6feb7f50629' date '13 February 2006' time '6:08:04 pm' author 'md' ancestors ((id '86ba0dcd-cafc-4521-a3ae-b2c371bfcb51')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(id '8dc398e2-af7f-11da-a7a4-000d933a223c')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Compiler-nice.139' message 'nil out locals in a block if readBeforeWritten
- Use noteOptimizedIn: instead of noteOptimized
- Let accept: return the result of message sent to visitor
' id 'a131f445-c2f7-dd47-85fd-b0d38ab18874' date '7 April 2010' time '3:06:44.988 am' author 'nice' ancestors ((id '15955722-1326-a940-9805-280830c59af6')) stepChildren ())) stepChildren ())) stepChildren ())(name 'Compiler-eem.140' message 'Fix code gen infinite recursion and missing error check for compiling assignments to read-only global variables.' id '1811aad2-ae46-40ed-baa6-f572c9d2cd49' date '20 May 2010' time '9:19:38.873 am' author 'eem' ancestors ((id 'c15d727c-a890-224c-b427-5d6eea33efed')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Compiler-fbs.183' message 'Fix for 7588: Decompiler>>interpretNextInstructionFor: bitrot:

If you change the first statement in the above-mentioned method to

  false ifTrue: [^ super interpretNextInstructionFor: client].

you will print out debug information. Or you would if you didn''t get an exception printing out the bytecode. "code copyFrom: 4 to: code size" fails because it tries to make a String of size -2. That''s because code at this point is something like ''70'' if you''re currently interpreting bytecode 112.

Changing the offending line to "nextPutAll: ''<'', code, ''>'' fixes things.' id '99e9d7d8-0347-5941-8b10-3a187432806e' date '19 December 2010' time '10:28:02.599 pm' author 'fbs' ancestors ((id 'ee785fb8-9a21-9b4a-a451-03f648a97ded')) stepChildren ())(name 'Compiler-nice.186' message 'Add both Compiler and Decompiler support for inlined #repeat.

Implementation notes:

For compilation, the repeat is implemented with a simple backward jump if ever the receiver is a block.

For decompilation, things are a bit more tedious because conditonnal loops (whileTrue/False) must be differentiated from unconditional loops (repeat).
The signature of conditional loops is that they all have their backward jump hoping over their conditional jump.
If a backward jump does not cross any conditional jump on its way back, then it must be a repeat.
The idea is thus to register the program counter of the test instruction before the conditional jump (lastJumpIfPc), and verify if the bacward jump branch after or before this instruction.
Things are a bit more complex because there can be a conditional instruction inside the repeat body. 
That''s why those conditional jumps must be stacked (on lastJumpIfPcStack), and unstacked once decompiled.' id '9bdb53d0-56a1-4d0b-9835-f60a135dd7f6' date '3 February 2011' time '11:26:04.737999999 pm' author 'nice' ancestors ((id 'ba12fb9c-6c57-429b-b415-1188e1faba8b')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())