Changes

Summary

  1. This is a first idea how to cache pragmas (details)
  2. fix a test: add to AbstractObjectsAsMethod api cachePragmas (details)
  3. - fix typo (details)
  4. ClassDescription stores RemoteString instances. But that is not needed: we can store instead the sourcepointer (as we do with CompiledMethod). (details)
  5. CatalogBrowser can use the API that we have to get pragmas from one class. This ommits iterating the whole system to find pragmas (details)
  6. fixes #6839 (details)
  7. Fix #7222 (details)
  8. The compiler is doing far too much magic in #isInteractiveFor: (details)
  9. make sure that two of the users return false if the var is nil (details)
  10. - change CopyingLocalVariable to CopiedLocalVariable ("this variable is copied"), in line with #createCopiedVariableFor: (details)
  11. Fix #7219 (details)
  12. Fix #7217 (details)
  13. Fix #7214 (details)
  14. Add support for completing shared pools (details)
  15. This PR adds support to decompile Clean Blocks. (details)
Commit 312363ca11665ff41c04e2b4e1000ee57713ee5a by marcus.denker
This is a first idea how to cache pragmas
-> Pragma class has a Dictionary with one entry per selector
-> It references the Pragmas weakly

CompiledMethods add their pragmas to the cache when they are added in a class.

Speed to get all pragmas:

[Pragma allInstalled] bench "'799.320 per second'".
[PragmaCollector allSystemPragmas] bench  "'54.923 per second'"

But it will now grow with the number of pragmas, not number of methods.

Pragma allNamed: aSymbol can replace the use of the PragmaCollector in many cases (to be explored)

This PR just adds the Cache and tests, it is not yet used. The next step is to test it a bit, compare it with #allSystemPragmas and
the implement allSystemPragmas to use the cache.
The file was modifiedsrc/Kernel/Pragma.class.st (diff)
The file was modifiedsrc/Kernel/CompiledMethod.class.st (diff)
The file was modifiedsrc/Kernel/MethodDictionary.class.st (diff)
The file was modifiedsrc/Kernel-Tests/PragmaTest.class.st (diff)
Commit cda01abcefc1b0dc367873bcca76b752fd74f657 by marcus.denker
fix a test: add to AbstractObjectsAsMethod api cachePragmas
The file was modifiedsrc/Tests/AbstractObjectsAsMethod.class.st (diff)
Commit 20a2d5b6debef075c342f00416b718d559ff267a by marcus.denker
- fix typo
- recategorize API method
- improve tests
The file was modifiedsrc/Kernel/Pragma.class.st (diff)
The file was modifiedsrc/Kernel-Tests/PragmaTest.class.st (diff)
Commit 0334e99f7aa1b49f8b3bb98059fede019082e895 by marcus.denker
ClassDescription stores RemoteString instances. But that is not needed: we can store instead the sourcepointer (as we do with CompiledMethod).

Why is this better? it removes one instance of RemoteString per class comment from the image, saving memory espeically for images with many well documented classes.
The file was modifiedsrc/Kernel/ClassDescription.class.st (diff)
The file was modifiedsrc/Kernel/ClassOrganization.class.st (diff)
The file was modifiedsrc/System-SourcesCondenser/PharoChangesCondenser.class.st (diff)
Commit f4218005e6d6c41f854922373647de4edd8af36f by marcus.denker
CatalogBrowser can use the API that we have to get pragmas from one class. This ommits iterating the whole system to find pragmas
The file was modifiedsrc/Tool-Catalog/CatalogBrowser.class.st (diff)
The file was modifiedsrc/Glamour-Helpers/BlockClosure.extension.st (diff)
Commit da9348eafb9c4d1a5e9fa7d216c2dfec82cd1f1f by guillermopolito
Fix #7222
All #acceptVisitor: should return the result of the visit
The file was modifiedsrc/AST-Core/RBEnglobingErrorNode.class.st (diff)
Commit 82c4d54add66505674a9483516ca3e8602a2e0f8 by marcus.denker
The compiler is doing far too much magic in #isInteractiveFor:

It allows #isInteractive to not be implemented on the requestor. But even if it is, it does a nil check.

As a first improvement, we require that #interactive has to return a boolean if it exists.
The file was modifiedsrc/OpalCompiler-Core/OpalCompiler.class.st (diff)
Commit 567ed7b14047063148f1aaa25c2f32b8dde8af85 by marcus.denker
make sure that two of the users return false if the var is nil
The file was modifiedsrc/CodeImport/MethodChunkCompilerRequestor.class.st (diff)
The file was modifiedsrc/CodeImport/FileCompilerRequestor.class.st (diff)
Commit bbf2305249233349ba39e352982cdea5d42e8af9 by marcus.denker
- change CopyingLocalVariable to CopiedLocalVariable ("this variable is copied"), in line with #createCopiedVariableFor:
- simplify OCUndeclaredVariableWarning>>#defaultAction a little
The file was removedsrc/OpalCompiler-Core/CopyingLocalVariable.class.st
The file was addedsrc/OpalCompiler-Core/CopiedLocalVariable.class.st
The file was modifiedsrc/OpalCompiler-Core/LocalVariable.class.st (diff)
The file was modifiedsrc/OpalCompiler-Core/OCUndeclaredVariableWarning.class.st (diff)
Commit 4825f675259fc9e71b1be0b3fa9d5ee1433c31b0 by guillermopolito
Fix #7219
Produce a valid AST (for methods)
The file was modifiedsrc/Rubric/RubSmalltalkEditor.class.st (diff)
Commit 0abc47fefc6a58803e7f4c37ef98df908ac55d83 by guillermopolito
Fix #7217
RBEOFToken should have an empty value. Otherwise it has a wrong stop and source interval.
The file was modifiedsrc/AST-Core-Tests/RBParserTest.class.st (diff)
The file was modifiedsrc/AST-Core/RBEOFToken.class.st (diff)
Commit cd059a2582853abc26f444a0be0f4de1a0d1c85a by guillermopolito
Fix #7214
If in scripting mode, rubric should parse expressions and not methods.
Clean commented code.
The file was modifiedsrc/Rubric/RubSmalltalkEditor.class.st (diff)
Commit b9397d8132d3fec235b41226fb61876cc03e2359 by guillermopolito
Add support for completing shared pools
The file was modifiedsrc/HeuristicCompletion-Model/CoInstanceAccessibleVariablesHeuristic.class.st (diff)
The file was modifiedsrc/HeuristicCompletion-Tests/CoBasicCompletionTest.class.st (diff)
The file was addedsrc/HeuristicCompletion-Model/CoSharedPoolVariableFetcher.class.st
The file was modifiedsrc/HeuristicCompletion-Tests/CoMockClass.class.st (diff)
The file was addedsrc/HeuristicCompletion-Tests/CoSharedPoolVariableFetcherTest.class.st
Commit ff2ed902692aef7c1259d924c0bf1ab7edbd8c55 by marcus.denker
This PR adds support to decompile Clean Blocks. 
The file was modifiedsrc/Flashback-Decompiler/FBDDecompiler.class.st (diff)